2009-09-08 99 views
2

我的应用程序需要在不同团队的不同级别获得安全保护的能力。例如,某人可能是一个团队的管理员,但可能只是另一个团队的查看者。asp.net会员/角色提供商问题

理想情况下,我想要一个单一的小组角色,但是我希望将人员分配给每个团队的不同角色。即“Joe”可能是TeamA的管理员,但TeamB有Reader访问权限。

Asp.Net提供者框架是否支持这个?

--Matt

更新:我的问题是与 “IsInRole” 的方法。它只需一个参数。除了黑客攻击(连接两个项目,如团队ID和角色名称),还有其他方法可以解决这个问题吗?

回答

1

据我所知道的一个例子,有没有组到角色中如何条款RoleProvider类的作品,但没有理由不能在数据源中实现分组结构。然而,RoleProvider确实支持不同的应用程序名称,所以有可能使用这种方式来将应用程序分割成逻辑组,这些逻辑组被识别为不同的,因此分配了不同的角色。

编辑:

在回答您的编辑,你可以有结构为数据库中的如下

Group Table   Access Table   Role Table 
id | name    id | name    group_id | access_id | name 
-----------   ------------   --------------------------- 
1 Team A   1 Guest    1   1   Team A Guest 
2 Team B   2 User    1   2   Team A User 
         3 Admin    1   3   Team A Admin 

一个有当在Role表更新name领域的机制新行被插入。

实现一个自定义的RoleProvider非常简单。您只需要从RoleProvider继承并覆盖所需的方法,即编写RoleProvider应从中获取数据的逻辑。

+0

谢谢Russ,那个DB结构类似于我认为我必须使用的那个。我遇到的一个问题是调用者将传递给IsInRole。单个参数(角色名称)可能不适用于我。 (我实际上已经简化了我的问题,对于团队来说也有一个层次结构)。无论如何,感谢您的意见。我认为这(或类似的)将成为我走的路线。 --- Matt – 2009-09-09 12:23:51

+0

@Matt - 将传入的名称将是RoleTable中的名称,即if(User.IsInRole(“Team A Guest”))。 – 2009-09-09 13:41:17

+0

再次感谢拉斯。这也是我的想法(连接名称)。我想我可以让它工作,但感觉很难受。 – 2009-09-09 18:43:39

0

不是开箱即用。您需要创建一个自定义提供商支持此功能

这里是创建一个自定义的成员提供 http://www.asp.net/learn/videos/video-189.aspx

+0

请参阅我在上面的主要问题中添加的关于“IsInRole”方法的注释。 – 2009-09-08 21:18:21

+0

微软设计它,以便您可以创建您自己的角色提供者。首先从RoleProvider继承创建你自己的类,然后提供需要团队id的方法,然后角色名称 – clyc 2009-09-08 21:29:14

+0

你基本上必须编写sql来做检查 – clyc 2009-09-08 21:29:52