2013-04-09 153 views
0

我拥有成员资格的用户,一个用户可以分配一个或多个角色。我想检查例如网页的特定角色:ASP.Net多角色用户角色和成员资格检查

基于role1,role2所,Role3,Role4,Role5

用户谁拥有基于role2和Role3的访问可以访问Page1.aspx的和另外如果用户谁有权访问角色1和角​​色2也可以访问,因为角色2可用。

我已经实现成员资格和有用户的角色字符串数组列表与

串[]角色= Roles.GetRolesForUser(User.Identity.Name)的帮助;

我该如何检查多个角色?我可能需要使用Roles.IsUserInRole函数逐个检查吗?

我已经使用过;由于合伙人在大写,它返回0计数。我怎么能忽略大小写?下面是对数组检查数组的正确方法吗?

string[] userroles = { "Partner", "testsetsr" }; 
string[] requiredroles = { "contractor", "customer", "sims", "nonclientau", "partner" }; 
     var countInRoles = userroles.Intersect(requiredroles).Count(); 

回答

0

您必须实施您自己的授权过滤器声明。为此,您可以创建一个扩展'AuthorizationAttribute'的类,然后重写OnAuthorization,您可以在其中指定所需的角色检查。

关于如何做一个小例子,这将是here in Nimesh's .Net Blog

这个例子是不是你的个人问题的解决方案,但应该给你,你需要做些什么的想法。

编辑: 同样为您的应用程序角色的供应商,扩展它和重写的isUserInRole(或者更好的甚至可以添加新的方法),为您提供,以便有Roles.IsUserInRole工作,你所希望的方式所需要的检查。

为了您的第二个问题: 如果你有2点阵列和要计数第一个阵列中的许多成员是如何在第二个成员,而忽视情况下,你可以做到这一点使用LINQ

var countInRoles = userroles.Select(u => u.ToLower()).Count(u => requiredroles.Select(r => r.ToLower()).Contains(u)); 

在另一方面,如果你有一个访问某个动作所需角色的列表,反之亦然,你也可以使用linq检查用户是否具有所有需要的角色(再次忽略大小写)

string[] requiredroles = { "Partner", "testsetsr" }; 
string[] userroles = { "contractor", "testsetsr", "customer", "sims", "nonclientau", "partner" }; 
var userHasAllRequiredRoles = requiredroles.Select(r => r.ToLower()).All(r => userroles.Select(u => u.ToLower()).Contains(r)); 
相关问题