如何在 .NET 中使用 Membership 重命名角色?

Posted

技术标签:

【中文标题】如何在 .NET 中使用 Membership 重命名角色?【英文标题】:How do you rename a Role using Membership in .NET? 【发布时间】:2010-09-21 20:47:32 【问题描述】:

我正在使用 ASP.NET Membership,并注意到Roles class 中没有一个方法来修改一个角色(例如它的名称),只能创建和删除它们。

有可能还是不支持?

编辑:@CheGueVerra:是的,很好的解决方法。

你知道(额外的功劳:))为什么这是不可能的吗?

【问题讨论】:

为什么不可能:不在基类中 [public abstract class RoleProvider: ProviderBase] 为什么他们选择不实现它,我还不知道;)我会让你问这个问题 【参考方案1】:

没有直接的方法可以在成员资格提供程序中更改角色名称。

我将获取您要重命名的角色中的用户列表,然后将其从列表中删除,删除角色,使用新名称创建角色,然后将之前找到的用户添加到角色中新名字。

public void RenameRoleAndUsers(string OldRoleName, string NewRoleName)

    string[] users = Roles.GetUsersInRole(OldRoleName);
    Roles.CreateRole(NewRoleName);
    Roles.AddUsersToRole(users, NewRoleName);
    Roles.RemoveUsersFromRole(users, OldRoleName);
    Roles.DeleteRole(OldRoleName);

这将更改角色中所有用户的角色名称。

跟进:角色,用于确保用户仅在系统中发挥他的作用,因此 User.IsInRole(ROLE_NAME) 将帮助您强制执行适用于用户及其所在角色的 BR 证券. 如果您可以即时更改角色名称,您将如何验证用户是否确实在该角色中。好吧,当我问到这件事时,我就是这么理解的。

rtpHarry 编辑:将伪代码示例转换为可编译的 c# 方法

【讨论】:

【参考方案2】:

以编程方式重命名 ASP.NET 成员模型中的角色将是一件坏事™,因为角色名称在配置文件中用于定义权限。如果有一种编程方式来更改角色名称(将更改持久化到数据库),您将立即破坏 web.config 中任何使用数据库的 Web 应用程序的基于角色的安全配置,并且没有办法以保证单个 Web 应用程序可以更改使用该 Membership DB 的每个 Web 应用程序的配置。

【讨论】:

是的,但我不打算使用配置文件,因为我的用户可以创建新角色,他们可以通过应用程序配置新角色可以访问哪些页面。我需要添加运行时检查,所以这个限制是不必要的 如果你删除一个角色会不会发生同样的情况?

以上是关于如何在 .NET 中使用 Membership 重命名角色?的主要内容,如果未能解决你的问题,请参考以下文章

Membership 介绍

如何不使用 ASP.Net Membership Security Question and Answer 进行自定义密码恢复?

ASP.NET MVC2 Membership:如何获取登录用户的 userID 和 roleID?

如何将 Membership API 与自己的应用程序相关数据结合使用?

ASP.NET Membership 作为用户登录

membership与成员资格