2010-03-26 46 views
3

我正在开发一个系统,我们希望根据用户的角色限制显示给用户的信息的可用性。如何将.net成员身份角色分配给各个数据库记录

例如我有一个名为提交讨论EventType (ID, EventTypeDescription) 其中包含以下记录:

1, 'Basic Event' 
2, 'Intermediate Event' 
3, 'Admin Event' 

我需要实现的是过滤返回的基于用户名(并因此角色)的记录登录的用户。例如,如果高级用户登录,他们将看到所有的事件类型,如果标准用户登录,他们将只能看到基本事件类型等。

理想情况下,id想以这种方式做到这一点,可以很容易地必要时扩展到其他表格。所以我想避免简单地向数据是用户上下文敏感的每个表添加“角色”字段。

一个想法,我想的是创造某种权限表像:

PermissionsTable 
(
    ID, 
    Aspnet_RoleId, 
    TableName, 
    PrimaryKeyValue 
) 

这有利用这显然不必使用表名称切换到加入到哪个表的缺点。

编辑: 在没有什么更好的建议,我会去与我提到的最后一个想法,但不是有表名场,我要规范化表名出它自己的表如下:

TableNames 
(
    ID, 
    TableName 
) 

UserPermissionsTable 
(
    ID, 
    Aspnet_UserId, 
    TableID, 
    PrimaryKeyValue 
) 
+0

只是一个想法,但如果你有1个基本的,2个中间的,3个管理选项,那么你应该在这些数字之间加上一些空格,例如10 20 30,这样可以给你一些空间来在未来添加额外的代码。这可以让你按代码对表格进行排序,并测试(管理员)是否显示管理员级别或更少。 – rtpHarry 2010-04-30 10:01:17

回答

1

我们做类似的事情,我们的解决方案是使用表值函数来加入。 即。

SELECT * FROM事件Ë 内加入[DBO] .fn_AvailableEvents(@User_ID)一个上e.id = a.id

函数只返回用户被允许看到的事件的事件ID 。

0

你不提什么(如果有的话)你使用,但假设的SQL Server数据库,然后如果连接使用Windows身份验证,您可以创建视图或存储过程是基于过滤数据在SYSTEM_USER函数上。

+0

嗨,我的确在使用SQL Server,但不幸的是我不能使用这个解决方案,因为我使用的是表单身份验证。 – 2010-04-22 10:33:26

+0

我不认为窗体身份验证和模拟(在连接字符串中使用集成安全性)是相互排斥的。看看http://visualstudiomagazine.com/articles/2004/05/01/activate-windows-impersonation-selectively.aspx看起来它可能会为你工作。 – 2010-04-22 11:16:26

0

即使你不使用它,这是一个耻辱,你至少可以从Rhino.Security了解这个概念的来龙去脉。

1

我做,同时建设一个CMS类似的东西...

基本上我创建一个数据库中的几个表: 用户 角色 UsersInRoles 对象 ObjectPermissions

好它的工作原理是这样的。 ..

前3是相当自我解释,用户,角色和他们之间的联系。 根据用户对角色的成员资格授予用户权限。

我做的下一件事是定义我想要控制权限的“对象”,以及我想分配给他们的权限级别......

因此,对象包含对象定义的列表,然后在由对象ID相关的其他表中进行扩展,并且ObjectPermissions表基本上将对象链接到角色。

现在,在这一点上,我看到它的权限,仅此而已以下的列表它可能是值得说明的是一些关于角色......

的角色。

所以,如果我创建一个名为客串角色和角色设置为允许读取权限,然后创建一个角色名为admin拥有全球权利做的一切,然后我可以做这样的事情...

添加用户1个管理员角色。 将对象1添加到管理员角色。

用户1现在可以完全访问对象1,这里重要的是继承权限,因此任何子对象(想象文件和文件夹权限)都将在同一个角色集中,除非递归重写。

因此,默认情况下,我将根级别对象分配给每个关键系统角色。 然后,我有选择地将用户添加到树中不同点上的各种角色。

这是否有意义?

本质上,我可以选择任何对象和任何用户,并通过将用户添加到与对象相同的角色,为该对象及其子级上的用户授予不同程度的权限。

现在有一些事情需要注意这一点....

如果我想用户具有深层嵌套的对象上管理员权限,但不能从根本层面,我将不得不创建一个授予所有新角色权限并将用户和对象添加到它。

原因是,如果我将用户添加到主管理员角色,用户将从根级别获得这些权限而不是从我的嵌套对象。

更多的是它而不是这个,但基本上这就是文件系统权限的工作方式。

相关问题