ASP.NET自定义角色提供程序-附加字段

3
当我将我的代码迁移到ASP.NET时,我遇到了一个安全模型问题。
应用程序中:
1. 有多个角色(Role A、Role B等)。 2. 有多个输入/输出字段(Field A、Field B等)。 3. 有多个权限级别来控制对每个字段的访问(读取、直接编辑、审批后编辑、无)。 4. 每个角色都有其对字段的权限(Role A对Field A具有读取权限;Role B对Field A具有直接编辑权限等)。 5. 每个角色都可以被指定给用户,并且它们是通过地理信息分配的(User A被指定为欧洲-德国角色A;User B被指定为欧洲-法国角色A;User A被指定为欧洲-法国角色B等)。 6. 用户可以拥有多个角色。 7. 用户身份来自Windows身份验证。
因此,我的问题/问题是:是否可以使用ASP.NET内部成员身份验证/角色提供程序来表示这种多层安全模型?
如果可以,我的起点应该是什么?只创建自定义角色提供程序并具有自定义方法和字段就足够了吗?
3个回答

1
即使使用ASP.NET的内置功能、Membership Provider和用户控件,您仍然需要编写和管理自定义行为和交互。
例如,Membership Provider提供了简单的方法来创建角色并检查角色是否存在。但是,您将需要创建特定于业务的仪表板,调用适合于应用程序公开的API功能。例如,在我曾经工作过的许多组织中,角色创建仅限于数据库活动。基于角色的用户控件或站点行为仅限于代码活动。管理分配给用户的角色是通过应用程序中的管理员页面公开的功能。如果需要新角色,则必须首先由DBA创建,然后编写响应该角色的代码/控件。在部署这些项目之后,应用程序管理员可以分配或删除用户的角色。
针对您在问题中的评论,如果您有Europe_Germany_RoleA,Membership API提供了方法让您创建该角色,将其映射到用户,并检查其在特定用户上的存在。
if(User.Roles.Contains("Europe_Germany_RoleA")) {
//your code here
}

但您需要将特定角色映射到与应用程序相关的信息或功能。

回想一下,也许您真正想查看的是配置文件提供程序。它仍然是成员身份集(成员身份、角色、配置文件)的一部分,更多地设计用于携带信息。您可以自定义个人资料对象以满足您的应用程序需要。例如,如果您将其视为“部门”(缺乏更好的术语)在用户登录时可加载,则可以执行以下查询...

if(Profile.Sectors.FirstOrDefault(sd=> sd.Name == "Europe_Germany_RoleA") !=  null) {
//bind to a grid, show a control, do something significant
}

这可能更适合您的问题。角色真正只是作为标志(他是否拥有此角色,然后执行某些操作或不执行),但是配置文件对象旨在定制以携带用户的相关数据。


感谢您的回答,Jonathan。但是我没有并且也不会有像Europe_Germany_RoleA这样的地理特定角色。地理位置是分配给用户的,因此用户、角色、大陆和国家共同形成了用户对记录的访问权限。 - Lexicon
1
抱歉,我的回答只是基于您对Mystere Man问题的评论。话虽如此,我认为Membership API仍然可以帮助您以特定于应用程序且易于更新和维护的方式管理一些通用概念(角色、访问等)。 - Jonathan Bates

1

您可以随时进行扩展。ASP.NET Membership 模型使用 GUID 作为用户和角色的 ID。您可以添加新表来表示新增功能,并让它们引用原始的 Membership 表。


1

你的问题不在角色提供程序或会员系统上。这个系统足够灵活,可以满足你的需求,并允许你为单个用户分配多个角色。你可以使用SQL表来存储这些角色,也可以使用Active Directory,后者可能更容易管理用户。

你主要的问题将是如何为字段和其他对象分配权限。这意味着你不能只使用标准的拖放Web表单,而必须动态构建你的字段。

检查用户是否在角色中很容易,这是一个一行代码的调用。但是,你的角色可能不是硬编码的,所以你需要一种方法来存储字段和与之相关联的角色,以及一种基于用户权限构建字段的方法。

编辑:

另一个选择是按照没有安全性的方式构建表单,然后在预渲染事件中逐个应用安全性到每个字段,禁用和/或隐藏你不想让用户看到的字段。如果你选择隐藏它们,这可能需要重新布局字段。


但是主要问题是,例如我没有这个角色:Europe_Germany_RoleA。在分配用户时,地理信息应该与用户/角色进行映射。 - Lexicon
当账户创建时,将用户分配给德国角色。 - Erik Funkenbusch
@Lexicon - 我已经多次阅读了您的帖子,但您从未提到过您没有地理角色。事实上,您暗示了您拥有这些角色。如果您没有这些角色,也不想使用它们,那么您应该重新措辞您的问题。 - Erik Funkenbusch
第五项示例以及您之前的评论都表明了这一点。 - Lexicon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接