我想根据角色设置我的菜单。我制作了一个模型来检查我的角色,并在此基础上构建我的菜单。
我有不同的控制器和动作,例如:
/ProjectTest/Reports/Projects
/ProjectTest/Admin/Client
/ProjectTest/Admin/Resource
/ProjectTest/portfolio/Schedule
我如何确保当用户输入上述任何 url 时,它会命中我的模型来检查角色?
我想根据角色设置我的菜单。我制作了一个模型来检查我的角色,并在此基础上构建我的菜单。
我有不同的控制器和动作,例如:
/ProjectTest/Reports/Projects
/ProjectTest/Admin/Client
/ProjectTest/Admin/Resource
/ProjectTest/portfolio/Schedule
我如何确保当用户输入上述任何 url 时,它会命中我的模型来检查角色?
实现您自己的RoleProvider,然后使用AuthorizeAttribute
.
如果您创建一个继承自 的类RoleProvider
,并为此提供一个实际的实现string[] GetRolesForUser(string username)
就足够了。您的实现应该检查您的模型以找出用户所在的“角色”并将其作为字符串数组返回。
例如
public override string[] GetRolesForUser(string username)
{
// if model says user is in Admin and ReportViewer roles
return new[] {"Admin", "ReportViewer"};
// else return other roles
return new[] { "User" };
}
然后,您希望限制给给定角色的用户使用的任何操作或控制器,您都可以使用AuthorizeAttribute
.
例如
[Authorize("Admin")]
public class AdminController
{
... etc...
public class ReportController {
[Authorize("ReportViewer"]
public ActionResult Client()
{
...etc...
您可以做的一件事是创建一个所有“基于菜单”的页面都使用的共享布局页面。此共享页面可以针对您的角色模型进行强类型化,这将允许您在加载页面内容之前检查用户是谁以及他们的权限是什么。
我不确定您的模型如何处理角色,但您可以从那里将一些东西放入视图包中,生成一些 html 等,以便您的页面知道要加载哪些菜单。