asp.net ProfileProvider中基于角色的配置文件数据

Posted

技术标签:

【中文标题】asp.net ProfileProvider中基于角色的配置文件数据【英文标题】:Role based Profile data in asp.net ProfileProvider 【发布时间】:2009-07-30 05:22:52 【问题描述】:

我在我的 asp.net 网站中定义了几个不同的角色:管理员、默认用户。目前,我使用内置的配置文件提供程序来存储有关用户的一些信息(名字、姓氏、头像......)。 接下来我想做的是提供一个具有“管理员”角色的用户来存储一些关于他的偏好的数据。 (可能是 EditorType、Notifications、LogSize ...)。

这可以通过默认的配置文件提供程序完成吗?还是我必须构建自定义表或自定义提供程序并自己维护这些数据? 我想要的是基于角色的配置文件属性。欢迎任何想法!

【问题讨论】:

【参考方案1】:

您想要实现的目标是不可能的,因为一个配置文件绑定到一个用户而不是角色。用户可以有多个角色,但不能有多个配置文件。

如果您仍然想这样做,您可以继续创建可供所有用户使用但仅对管理员有效的属性。只是角色。您可以在代码中执行此检查。

我建议您不要在这种情况下使用 ProfileProviders。在这种情况下,所有内容都存储为文本,这将严重降低应用程序的性能。

【讨论】:

【参考方案2】:

使用默认的配置文件提供程序,您可以添加这些额外的仅限管理员使用的属性。当然,所有用户都可以使用它们,但是从代码中控制它很简单。

如果某人的管理员权限被暂时撤销,则该信息仍会保存,并且当他们取回它们时,所有旧值仍然存在,这是一个额外的优势。当然你可以根据你的要求清除它们。

与任何安全系统一样,用户特定属性的存在不应推断角色/组成员身份,因此请确保您仍然执行 user.IsInRole("Administrators") 检查。

【讨论】:

【参考方案3】:

正如其他回答者已经指出的那样,您无法真正扩展内置的基于角色的系统。

但是,为了保留当前的 ​​ASP.NET 成员资格和角色提供者并继续从他们的服务中受益,您可以做的只是简单地为 aspnet_Roles 创建一个扩展表。像这样的:

CREATE TABLE dbo.MyOwnRoleExtensions
(ExtensionID INT IDENTITY(1,1) PRIMARY KEY,
 ApplicationId uniqueidentifier,
 RoleId uniqueidentifier,
 (whatever fields you need here......)
)

然后您可以在 (ApplicationId, RoleId) 上建立与 aspnet_Roles 表的外键关系,从而将您的“角色扩展”表与基本 aspnet_Roles 表相关联。

当然,如果您需要检索扩展表中的其他字段,您需要在自己的代码中执行此操作 - 但这样,您仍然可以使用和利用内置 ASP 的所有优点.NET 成员资格和角色提供者,您不需要任何肮脏的黑客或任何东西。

马克

【讨论】:

以上是关于asp.net ProfileProvider中基于角色的配置文件数据的主要内容,如果未能解决你的问题,请参考以下文章

爬虫案例—中基协数据爬取

C# 中基元的 == 和 Equals() 有啥区别?

java中基类和超类的区别

访问另一个子类中基类的受保护成员

C ++访问派生类中基的私有结构

将派生类列表传递给需要 C++ 中基类列表的函数