我有会员资格的用户,一个用户可以分配一个或多个角色。我想检查页面的特定角色,例如:
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();
答案 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));