【问题标题】:ASP.net Limit user functions based on custom table roles and permissions, not ASP MembershipsASP.net 根据自定义表角色和权限限制用户功能,而不是 ASP 成员资格
【发布时间】: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 子句。

  1. 如何防止没有特定 SYSTEM 的 INSERT 权限的用户 ID 插入 tblSYSTEMS_Projects 表?
  2. 当当前登录的用户 ID 尝试点击 INSERT 时,我该如何将他们重定向到“您没有权限”页面?
  3. 我可以根据当前登录的用户 ID 简单地隐藏 INSERT 命令吗?我什么时候会这样做?在页面加载?对方法有什么建议吗?返回 INSERT 值标量的简单 SP?

我查看了角色/成员资格等......但这并不完全有效,因为许多不同的人根据系统具有不同的权限。在一个系统中,一个人可以是管理员,而在另一个系统中,一个人只能是查看者。

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

【问题讨论】:

    标签: asp.net sql authentication


    【解决方案1】:

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

    我将根据用户的角色限制授权。例如,如果 SystemAddRole 中,而用户在 AddRole 中,则用户可以创建新记录。

    页面的授权逻辑不应单独存在于 Store Procedure 中。相反,它应该在表示层(例如控制器)中启动。

    如果需要添加逻辑检查,可以放在业务逻辑层。

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

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

    【讨论】:

    • 我想我明白你在做什么。 UsersInRoles 中还需要有一个字段,它是链接系统的主键的一部分。正如我所说,用户可以在系统 A 中拥有编辑权限,但只能在系统 B 中查看。因此该角色取决于用户/系统。我也喜欢添加角色表的想法。
    • 如果您使用 DefaultRole 提供程序,则无法向 UsersInRoles 表添加任何其他列。换句话说,如果您向 UsersInRoles 添加一列,则必须创建 Custom Role Provider
    • 到目前为止,我只使用 ASP.net 提供的表来控制登录。我只关心 ASP.net 管理用户,不一定关心角色。我只是用它来获取当前登录用户的用户 ID。
    • 这是 catch 22。总的来说,如果您在应用程序中需要身份验证,则需要使用基于角色的身份验证。为了使用基于角色的身份验证,您需要 Roles 表。
    猜你喜欢
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 2011-05-24
    • 2012-07-07
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多