0

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

角色 1、角色 2、角色 3、角色 4、角色 5

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

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

字符串 [] 角​​色 = Roles.GetRolesForUser(User.Identity.Name);

如何检查多个角色?我是否需要使用 Roles.IsUserInRole 函数进行一一检查?

我用过; 由于 Partner in capital,它返回 0 个计数。我怎样才能忽略大小写?下面是检查数组与数组的正确方法吗?

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

1 回答 1

0

您必须实现自己的授权过滤器属性。为此,您可以创建一个扩展“AuthorizationAttribute”的类,然后覆盖 OnAuthorization,您可以在其中指定所需的角色检查。

Nimesh 的 .Net 博客中有一个关于如何做到这一点的小例子

该示例不是您个人问题的解决方案,但应该让您了解您需要做什么。

编辑:您的应用程序角色提供者也是如此,扩展它并覆盖 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));
于 2013-04-09T06:29:16.387 回答