0

我开始一个新的项目,我有一个关于与ASP.Net MVC 3ASP.NET自定义角色提供者:角色取决于上下文吗?

我需要有一个角色验证我的构造的几个操作的自定义角色提供的问题,所以我说我的,好吧容易,我可以使用角色提供者。

的问题是,作用是根据当前的“上下文”的:

在我的数据库实际上用户链接到几个“实体”,并有实体X的作用“A”,并角色B为实体Y.将显示/编辑的所有数据都是该实体的“子女”

严格分隔:当我们登录时,我们必须选择我们想要工作的实体,然后,直到我们要求更改实体,我们将只有这个实体的数据和这个实体的权利。

当前的“实体”将被存储在会话中。

的目标是对实体X未授权菜单/动作,只是因为这项权利允许用户Y.

的问题是,在角色提供,我没有办法接受任何上下文,我只收到用户名。

那么你认为我可以做什么?(如果它可以帮助,会员也是一个自定义会员供应商)。

回答

0

要阻止对这些特定页面的访问,您可以对这些操作实施RoleManagementFilter。这将只允许员工角色,管理角色的用户访问特定页面。

[RequiresEmployeeRole(Route = "Account", Action = "LogOn", Order = 1)] 
Public ActionResult EmployeeSettings(){ 
    return View(); 
} 

的ActionFilter确实是基于请求的页面要么将其重定向到路线和操作的用户的角色是什么,你设定的路线=“账户”,行动=“登录”或允许他们进来。

下面是ActionFilterAttribute的一部分。

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     string[] roles = Roles.GetRolesForUser(); 
     string userrole = ""; 

     if (roles.Length > 0) 
      userrole = roles[0]; 

     if (Regex.IsMatch(userrole, Role)) 
      filterContext.HttpContext.Response.Redirect(redirectUrl(), true); 
    } 

我不知道你怎么可能拥有的实体,如果是feasable与否,但如果你要创建的每个实体的作用,重视用户这些角色,那么你可以立足于行动的限制如果用户在Roles.GetRolesForUser()中;

我发现一个MSDN文章重新操作过滤器http://msdn.microsoft.com/en-us/magazine/gg232768.aspx可能有帮助。有很多例子可以帮助你。

相关问题