ASP.net基于自定义表角色和权限限制用户功能,而不是ASP成员资格

时间:2014-03-10 17:48:19

标签: asp.net sql authentication

我有一个ASP.net网站,后端有MS SQL Server。

为简单起见,我将用三个四个表来描述我的问题,但实际上它远不止于此。

TABLES:

tblSYSTEMS
•SystemID(PK)
•SystemDescription
•其他专栏

tblSYSTEMS_Projects(许多项目可以与每个系统相关联)
•用户可以根据权限查看/修改/删除的各个字段。

USERS(由ASP.net生成,用户/会员/角色等...)
•用户ID •其他专栏

tblSYSTEMS_PERMISSIONS_LINK(此链接两个表格)
•SystemID
•用户ID •AllowEdit
•AllowView •AllowDelete
•AllowInsert

我为数据库中的tblSYSTEMS_Projects的每个INSERT / UPDATE / DELETE函数设置了一个存储过程。

当用户在tblSYSTEMS_Projects中更改/添加/删除记录时,我会将@userid的参数(从当前登录的用户)发送到SP。

对于UPDATE,我检查tblSYSTEMS_PERMISSIONS_LINK,对于tblSYSTEMS中的给定系统,他们将AllowEdit设置为true。表链接的方式,如果它们没有EDIT权限,则不会更新行(因为WHERE子句本质上返回0行),这是我在执行SP时得到的。细

DELETE也一样。

但对于INSERT,没有WHERE子句可用于将记录INSERTING到tblSYSTEMS_Projects。

  1. 如何防止没有特定SYSTEM的INSERT priveledges的用户标识插入到tblSYSTEMS_Projects表中?
  2. 当前登录的用户ID尝试点击INSERT时,我该怎么做才能将它们重定向到“你没有epermission”页面?
  3. 我可以根据当前登录的用户ID隐藏INSERT命令吗?我什么时候这样做?在页面加载?有关方法论的任何建议吗?简单的SP返回INSERT值的标量?
  4. 我查看了角色/成员资格等...但这并不常用,因为许多不同的人拥有基于SYSTEM的不同权限。在一个系统中,一个人可以是ADMIN,而另一个系统只能是一个查看器。

    我想要完成的是让用户只能访问他们的记录,但只授予他们执行他们允许的操作的权限。但这些权限因SystemID而异。

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到。这是我的方法基于角色的授权 -

我将根据用户的角色限制授权。例如,如果系统位于 AddRole 且用户位于 AddRole ,则用户可以创建新记录。

页面的授权逻辑不应仅在存储过程中。相反,它应该在表示层(例如Controller)中启动。

如果您需要额外的逻辑检查,可以将其置于业务逻辑层。

enter image description here

tblSYSTEMS_PERMISSIONS_LINK (this links the two tables)
• SystemID
• userid
• AllowEdit
• AllowView 
• AllowDelete
• AllowInsert

您不应该使用单个列创建 tblSYSTEMS_PERMISSIONS_LINK 表。 这不是一个好的数据库设计,除非您可以100%确保将来不会有任何新的授权类型