最佳用户角色权限数据库设计实践?

Jog*_*wan 7 sql database oracle permissions database-design

我想为Web应用程序设计数据库,用户可以根据给予角色的权限访问特定选项卡.

到目前为止我所做的是创建了两个表USER_TABLEUSER_ROLES.

USER_TABLE有以下字段:

  • id(主键)
  • 用户名
  • 密码
  • 名字
  • 创建日期
  • role_id_fk(外键)

USER_ROLES的字段如下:

  • id(主键)

  • role_name(例如ADMIN,TAB1_USER,TAB2_USER)

  • 创建日期

这里,具有role_name" ADMIN " 的用户可以看到所有选项卡,其他用户只能访问特定选项卡.

我的问题是我是否需要在USER_ROLES表中创建一个具有外键的表USER_PERMISSIONS,其中包含以下字段:

  • id(主键)
  • permission_type(ALL,TAB1,TAB2 ....)

或者我应该在我的代码级别管理这个?两种方法的缺点和优点是什么?

Zoh*_*led 30

正如krokodilko在他的评论中写道,这取决于你需要的灵活性水平.
我已经为我的一个客户实现了基于角色的权限,如下所示:

  1. 用户(用户ID(PK),用户名(唯一),密码(盐渍和哈希!),名字,姓氏,电话等')
  2. 角色(角色ID(PK),角色名称(唯一),角色描述)
  3. 权限(权限ID(PK),权限名称(唯一)) - 选项卡/屏幕/操作在此处
  4. 用户到角色(用户ID,角色ID) - PK是两个列组合在一起
  5. 权限角色(角色ID,权限ID) - PK是两个列的组合

但我的要求是尽可能灵活,这是一个仍在增长的系统(6年和数量).

我想很多应用程序可以让用户作为一对多的关系,而不是像我的情况那样多对多,但我不会在任何应用程序中努力编写权限或角色到权限.

  • 它们只是多对多的桥牌表,没有太多可说的...... (3认同)
  • 你能告诉更多关于 4 和 5 的信息吗? (2认同)
  • @vikrant实际上,“Permission”可能不是这个表的最佳名称。更合适的名称是“安全对象” - 意味着只能通过授权访问的内容 - 该表应该包含每个安全对象的应用程序范围(或域范围)唯一密钥 - 无论是路径、Windows 窗体,甚至一个按钮。虽然很灵活,但这仍然是一个简单的授权示例 - 意味着授权本身是二进制的 - 它要么存在,要么不存在。不同的实现可能包含不同的授权级别 - 类似于“读/写/执行”等。 (2认同)
  • @ZoharPeled 非常感谢您与我们分享这个设计:),我将这些值用于 3) :例如:post.read post.create post.comment.write post.all post.none,全部用于超级管理员角色如果禁止用户,则无,并且应用程序中的每个操作在3)中都有一个权限条目 (2认同)