1

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

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

4

3 回答 3

0

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

作为一个额外的优势,如果有人暂时撤销了他们的管理员权限,那么信息仍然会被保存,并且当他们取回它们时,他们所有的旧值仍然存在。当然,您可以根据自己的要求清除或不清除它们。

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

于 2009-07-30T06:39:42.927 回答
0

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

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

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

于 2009-07-30T06:43:57.350 回答
0

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

但是,为了保留当前的 ​​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 成员资格的所有细节和角色提供者,你不需要任何肮脏的黑客或任何东西。

马克

于 2009-07-30T06:50:11.190 回答