MVC默认代码每次执行

时间:2013-08-05 23:43:26

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我想根据角色设置菜单。我已经制作了一个模型来检查我的角色,并根据我构建我的菜单。

我有不同的控制器和动作,例如:

/ProjectTest/Reports/Projects
/ProjectTest/Admin/Client
/ProjectTest/Admin/Resource
/ProjectTest/portfolio/Schedule

如何确保当用户输入上述任何一个url时,它会命中我检查角色的模型?

2 个答案:

答案 0 :(得分:2)

实施您自己的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进行装饰。

e.g。

[Authorize("Admin")]
public class AdminController 
{
     ... etc...

public class ReportController {

    [Authorize("ReportViewer"]
    public ActionResult Client()
    {
    ...etc...

答案 1 :(得分:1)

您可以做的一件事是创建一个所有“基于菜单”的页面都使用的共享布局页面。此共享页面可以强烈键入您的角色模型,这样您就可以在加载页面内容之前检查用户是谁以及他们的权限。

我不确定你的模型如何处理角色,但是从那里你可以将东西放入视图包,生成一些chump html等,以便你的页面知道要加载的菜单。