ASP.Net角色和成员资格检查多个角色的角色用户

时间:2013-04-09 05:50:04

标签: asp.net authorization roles membership roleprovider

我有会员资格的用户,一个用户可以分配一个或多个角色。我想检查页面的特定角色,例如:

Role1,Role2,Role3,Role4,Role5

有权访问Role2和Role3的用户可以访问Page1.aspx,如果有权访问Role1和Role2的用户也可以访问,因为Role2可用。

我已经实现了成员资格,并在

的帮助下拥有用户角色字符串数组的列表

string [] roles = 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();

1 个答案:

答案 0 :(得分:0)

您必须实施自己的授权过滤器Attribure。为此,您可以创建一个扩展'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));
相关问题