【发布时间】:2014-03-11 02:39:32
【问题描述】:
我有一个 ASP.net 网站,后端有 MS SQL Server。
为简单起见,我将用三个四个表来描述我的问题,尽管实际上它远不止于此。
表格:
tblSYSTEMS
• 系统 ID (PK)
• 系统描述
• 其他栏目
tblSYSTEMS_Projects(许多项目可以与每个 SYSTEM 关联)
• 用户可以根据权限查看/修改/删除的各种字段。
USERS(由 ASP.net 生成,用于用户/会员/角色等...)
• 用户名
• 其他栏目
tblSYSTEMS_PERMISSIONS_LINK(链接两个表)
• 系统ID
• 用户名
• 允许编辑
• 允许查看
• 允许删除
• 允许插入
我为 tblSYSTEMS_Projects 数据库中的每个 INSERT/UPDATE/DELETE 函数设置了一个存储过程。
当用户去更改/添加/删除 tblSYSTEMS_Projects 中的记录时,我将 @userid 的参数(来自当前登录的用户)发送给 SP。
对于 UPDATE,我检查以查看在 tblSYSTEMS_PERMISSIONS_LINK 中,对于 tblSYSTEMS 中的给定系统,它们已将 AllowEdit 设置为 true。表的链接方式,如果它们没有 EDIT 权限,将不会更新行(因为 WHERE 子句本质上返回 0 行),我在执行 SP 时返回。很好。
删除也是如此。
但对于 INSERT,没有可用于将记录插入 tblSYSTEMS_Projects 的 WHERE 子句。
- 如何防止没有特定 SYSTEM 的 INSERT 权限的用户 ID 插入 tblSYSTEMS_Projects 表?
- 当当前登录的用户 ID 尝试点击 INSERT 时,我该如何将他们重定向到“您没有权限”页面?
- 我可以根据当前登录的用户 ID 简单地隐藏 INSERT 命令吗?我什么时候会这样做?在页面加载?对方法有什么建议吗?返回 INSERT 值标量的简单 SP?
我查看了角色/成员资格等......但这并不完全有效,因为许多不同的人根据系统具有不同的权限。在一个系统中,一个人可以是管理员,而在另一个系统中,一个人只能是查看者。
我想要完成的是让用户只能访问他们的记录,但只授予他们做他们被允许做的事情的权限。但这些权限因 SystemID 而异。
【问题讨论】:
标签: asp.net sql authentication