【问题标题】:ASP.Net Roles and Membership check for Users in role for multiple rolesASP.Net 角色和成员资格检查多个角色的角色中的用户
【发布时间】:2013-03-31 10:16:26
【问题描述】:

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

角色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();

【问题讨论】:

    标签: asp.net authorization roles membership roleprovider


    【解决方案1】:

    您必须实现自己的授权过滤器属性。为此,您可以创建一个扩展“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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      相关资源
      最近更新 更多