我正在开发一个具有两个不同“层”角色的 ASP.NET 系统。主层将使用 Active Directory 组来确定成员资格,而第二层将使用数据库。所有用户都将具有第 1 层 AD 角色,但并非所有用户都将具有第 2 层数据库角色。
我知道我可以使用 AspNetWindowsTokenRoleProvider 来管理 AD 角色,并且我知道我可以使用 SqlRoleProvider 来管理数据库角色......我想做的是同时使用两者 - 这可能吗?
我正在开发一个具有两个不同“层”角色的 ASP.NET 系统。主层将使用 Active Directory 组来确定成员资格,而第二层将使用数据库。所有用户都将具有第 1 层 AD 角色,但并非所有用户都将具有第 2 层数据库角色。
我知道我可以使用 AspNetWindowsTokenRoleProvider 来管理 AD 角色,并且我知道我可以使用 SqlRoleProvider 来管理数据库角色......我想做的是同时使用两者 - 这可能吗?
我建议从 派生WindowsTokenRoleProvider
,然后覆盖GetAllRoles
,GetRolesForUser
等。
首先调用基类,然后从数据库中附加适当的角色列表。
顺便说一句,作为数据库密钥,我建议使用帐户 SID(或其哈希)而不是DOMAIN\username
字符串,因为用户名可能会更改(婚姻等)并留下孤立的角色条目。发生的频率比您预期的要多:-(
提供程序的构建是为了“可插入” - 理论上您可以放入您需要的任何一个并让它正常工作。它们也被记录在案,以便您可以扩展现有的或使用您自己的。
因此,基本上,您希望自己的提供程序允许您将两者结合起来 - 为此,您可以按照@devstuff 的建议,从一个或另一个继承,然后将结果合并到覆盖的方法中,或者您可以创建有效的方法具有 AD 和 SQL 提供程序的实例并传递调用并以这种方式合并结果的代理类(可能有该模式的正确名称)。
然而,从根本上说,答案是创建您自己的供应商,结合这两个股票供应商来满足您的特定要求。