我正在开始一个新项目,我对ASP.Net MVC 3的自定义角色提供程序提出了一个问题。
我需要对我的构造函数的几个操作进行角色验证,所以我说过,好的,我可以使用角色提供程序。
问题在于角色取决于当前的“上下文”:
实际上,我的数据库中的用户链接到多个“实体”,实体X的角色为“A”,实体Y的角色为B.所有将显示/编辑的数据都是“儿童”这个实体
严格分开:当我们登录时,我们必须选择我们想要工作的实体,然后,在我们要求更改实体之前,我们将只拥有该实体的数据和该实体的权利。
当前的“实体”将存储在会话中。
目标是对实体X没有未经授权的菜单/操作,只是因为用户Y允许这样做。
问题是在角色提供者中,我无法接收任何上下文,我只收到用户名。
那么您认为我能做些什么?(如果它可以提供帮助,会员资格也是一个自定义会员提供商。)
答案 0 :(得分:0)
要阻止对这些特定页面的访问,您可以对操作实施RoleManagementFilter。这将只允许用户担任员工角色,管理员角色访问特定页面。
[RequiresEmployeeRole(Route = "Account", Action = "LogOn", Order = 1)]
Public ActionResult EmployeeSettings(){
return View();
}
ActionFilter所做的是基于请求页面的用户的角色将其重定向到路由和您设置Route =“Account”,Action =“LogOn”或允许他们进入的操作。
以下是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);
}
我不知道您拥有的实体有多少,如果它是可行的,但是如果您要为每个实体创建角色,请将用户附加到这些角色,然后您可以根据操作建立操作限制在Roles.GetRolesForUser();
中我找到了可能有用的MSDN文章重新操作过滤器http://msdn.microsoft.com/en-us/magazine/gg232768.aspx。有很多例子可以帮助你。