1- 2 فیلد LockoutEndDateUtc و LockoutEnabled برای همین ساخته شده و نیازی به فیلد اضافه IsEnabled نیست .
کد کنترلر برای Ban و UnBan کردن یک کاربر که ورودی userid کاربر رو میگیره :
public async Task<ActionResult> LockAccount([Bind(Include = "Id")] string id)
{
await UserManager.ResetAccessFailedCountAsync(id);
await UserManager.SetLockoutEndDateAsync(id, DateTime.UtcNow.AddYears(100));
return RedirectToAction("Index");
}
public async Task<ActionResult> UnlockAccount([Bind(Include = "Id")] string id)
{
await UserManager.ResetAccessFailedCountAsync(id);
await UserManager.SetLockoutEndDateAsync(id, DateTime.UtcNow.AddYears(-1));
return RedirectToAction("Index");
}
کد ویو :
@*Unlocked*@
@if (Model.LockoutEnabled && (Model.LockoutEndDateUtc <= DateTime.Now || Model.LockoutEndDateUtc == null))
{
<div class="col-md-10">
<p class="form-control-static">Active</p>
</div><br /><br /><br />
<div class="col-md-offset-2">
@using (Html.BeginForm("LockAccount", "ApplicationUsers", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary()
@Html.HiddenFor(model => model.Id)
<input type="submit" value="Ban User" class="btn btn-danger" />
}
</div><br /><br />
}
@*Locked*@
@if (Model.LockoutEnabled && (Model.LockoutEndDateUtc > DateTime.Now))
{
<div class="col-md-10">
<p class="form-control-static">
<span>@Model.LockoutEndDateUtc</span>
<span dir="rtl"> Banned till </span>
</p>
</div><br /><br />
<div class="col-md-offset-2">
@using (Html.BeginForm("UnlockAccount", "ApplicationUsers", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary()
@Html.HiddenFor(model => model.Id)
<input type="submit" value="Unban User" class="btn btn-success" />
}
</div><br /><br />
}
2- برای اینکه بفهمید یک کاربر آنلاین شده ، باید از Application_Start و Application_End در Global.Asax استفاده کنید .
وقت کاربر لاگین کرد ، UserId اش رو بگیرید و در Start وضعیتش رو به آنلاین تغییر بدید ( یک Property جدید باید برای آنلاین بود کاربر تعریف کنید ) و در Application_End این Property رو False به معنی آفلاین تغییر بدید .
روش های دیگه ای هم برای انجام این کار هست :
https://stackoverflow.com/a/23379616
https://www.codeproject.com/Articles...embers-Using-A