我在asp.net网站上定义了几个不同的角色:Administrators,DefaultUsers。目前,我使用内置配置文件提供程序来存储有关用户的一些信息(名字,姓氏,头像......)。 我接下来要做的是提供具有“Admistrators”角色的用户来存储关于他的偏好的一些数据。 (可能是EditorType,Notifications,LogSize ......)。
是否可以使用默认的Profile提供程序完成?或者我是否必须自己构建自定义表或自定义提供程序并维护这些数据? 我想要的是基于角色的配置文件属性。欢迎任何想法!
答案 0 :(得分:0)
使用默认的配置文件提供程序,您可以添加这些额外的仅限管理员的属性。当然它们可供所有用户使用,但它很容易通过代码控制它。
如果某人的管理员权限暂时被撤销,这是一个额外的优势,这些信息仍然会保存,当他们收回信息时,所有旧值仍然存在。当然,您可以根据自己的要求清除它们。
与任何安全系统一样,用户上特定属性的存在不应推断角色/组成员身份,因此请确保您仍然执行您的用户.IsInRole(“管理员”)检查。
答案 1 :(得分:0)
由于一个配置文件绑定到一个用户而不是角色,因此无法实现您想要实现的目标。用户可以拥有多个角色,但不能拥有多个配置文件。
如果您仍想这样做,您可以继续创建可供所有用户使用的属性,但仅对Admin中的用户有效。仅限角色。您可以在代码中执行此操作。
我建议您不要在此方案中使用ProfileProviders。在这种情况下,所有内容都以文本形式存储,这将严重降低应用程序性能。
答案 2 :(得分: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成员资格和角色提供者,您不需要任何肮脏的黑客或任何东西。
马克