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