同时使用多个 ASP.NET 角色提供程序

发布于 2024-08-15 12:24:42 字数 243 浏览 8 评论 0原文

我正在开发一个 ASP.NET 系统,该系统具有两个不同的角色“层”。主层将使用 Active Directory 组来确定成员资格,而第二层将使用数据库。所有用户都将具有第 1 层 AD 角色,但并非所有用户都将具有第 2 层数据库角色。

我知道我可以使用 AspNetWindowsTokenRoleProvider 来管理 AD 角色,并且我知道我可以使用 SqlRoleProvider 来管理数据库角色...我想做的是同时使用两者 - 这可能吗?

I'm developing an ASP.NET system that has two different 'tiers' of roles. The main tier will use Active Directory groups to determine membership, while the second tier will use a database. All users will have a tier-1 AD role, but not all users will have a tier-2 database role.

I know I can use the AspNetWindowsTokenRoleProvider to manage the AD roles, and I know I can use the SqlRoleProvider to manage the database roles... what I'd like to do is use both, simultaneously - is this possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

<逆流佳人身旁 2024-08-22 12:24:42

我建议从 WindowsTokenRoleProvider 派生,然后重写 GetAllRolesGetRolesForUser 等。

首先调用基类,然后附加适当的角色列表你的数据库。


顺便说一句,作为数据库密钥,我建议使用帐户 SID(或其哈希值)而不是 DOMAIN\username 字符串,因为用户名可能会更改(婚姻等)并留下孤立状态角色条目。发生的频率比您预期的要多:-(

I would recommend deriving from WindowsTokenRoleProvider, then overriding GetAllRoles, GetRolesForUser, etc.

Call the base class first, then append the appropriate list of roles from your database.


BTW, as the database key I'd recommend using the account SID (or a hash of it) instead of the DOMAIN\username string, since the username may change (marriage, etc.) and leave orphaned role entries. Happens more often than you expect :-(

墨落成白 2024-08-22 12:24:42

提供程序的构建是为了“可插入”——理论上,您可以插入您需要的任何一个并让它正常工作。它们也被记录下来,以便您可以扩展现有的或使用您自己的。

因此,基本上,您希望自己的提供程序能够允许您将两者结合起来 - 为此,您可以按照@devstuff的建议,从一个或另一个继承,然后将结果合并到重写方法中,或者您可以创建有效的内容一个代理类(该模式可能有一个正确的名称),它具有 AD 和 SQL 提供程序的实例,并以这种方式传递调用并合并结果。

但从根本上来说,答案是结合两个库存提供程序来编写您自己的提供程序,以满足您的特定要求。

Providers are built so as to be "pluggable" - in theory you can drop in whichever one you need and have it just work work. They are also documented so that you can extend the existing ones or use your own.

Basically therefore you want your own provider that will allow you to combine the two - to do this you can either, as suggested by @devstuff, inherit from one or other and then merge the results in overriden methods or you can create what is in effect a proxy class (there's probably a proper name for the pattern) that has instances of both the AD and SQL provider and passes the calls through and merges the results that way.

Fundamentally however the answer is to author your own provider combining the two stock providers to meet your specific requirement.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文