所以我目前正在使用登录中设置的 ViewBag 来确定他们是否只能看到管理员的东西。这样做是因为 Roles.CreateRole、Membership.CreateUser 和 Roles.AddUserToRole 被禁用,因为我们使用 ModelFirst ASP.net。
public ActionResult Login(LoginModel model, string returnUrl)
{
ViewBag.Admin = false;
if (model.IsValid(model.UserName, model.Password))
{
ViewBag.Admin = (bool)model.currentLoggedInEmployee.IsAdmin;
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError("", "Login data is incorrect!");
return View(model);
}
}
然后我们简单地使用:
@if (ViewBag.Admin == true) {
<li>@Html.ActionLink("Administration", "Index", "Administration")</li>
}
仅向管理员显示这些按钮。这行得通。
现在我们想要的是确保只有管理员才能运行某些功能,方法是执行类似于正常的操作
[Authenticate(Roles="Admin")]
[HttpPost]
public ActionResult Create(FormCollection collection)
{
// TODO: Add insert logic here
}
但是因为我们没有任何“角色”,所以我们不能这样做。我们需要使用 ViewBag.Admin 值来授权人们使用这些功能。问题是,如何做到这一点?