【发布时间】:2018-04-16 01:20:33
【问题描述】:
我正在编写一个新的 asp.net mvc4 web 应用程序,它由一个公共环境和一个单独的管理环境组成,现在我想知道这样做的最佳实践是什么。
我希望管理员登录 mysite.com/admin。
【问题讨论】:
标签: asp.net asp.net-mvc-4
我正在编写一个新的 asp.net mvc4 web 应用程序,它由一个公共环境和一个单独的管理环境组成,现在我想知道这样做的最佳实践是什么。
我希望管理员登录 mysite.com/admin。
【问题讨论】:
标签: asp.net asp.net-mvc-4
可以像 bluetoff 所写的那样组织 - 添加区域。但是,如果您的管理部分不是很复杂,我更喜欢创建单独的控制器“Admin”并使用属性限制对它的访问:
[Authorize(Roles = "admin")]
public class AdminController : Controller
如果用户是角色“admin”,则在 LogOn 方法中添加重定向到 AdminController:
public ActionResult LogOn(LogOnModel model)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (Roles.IsUserInRole(model.UserName, "admin"))
{
return Redirect("Index", "Admin");
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "Error");
}
}
【讨论】:
过去最适合我的范例是设置管理员area。一旦你有了这个区域,这将使你能够清楚地将你的管理功能与应用程序的其余部分分开。即/admin/users /admin/yourentities
为了将您的管理区域与应用程序的其他部分区分开来,您应该设置用户角色并根据角色限制管理员用户。这样一来,您就拥有了一张用户类型的数据库表、一张角色表,并且您拥有简单、可维护且易于理解的结构。
要利用角色,您可以创建一个custom action filter,您可以在其中检查用户角色并将访问权限限制为仅管理员角色用户
【讨论】: