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

时间:2017-09-02 16:59:37

标签: sql database oracle database-design permissions

我想为网络应用设计数据库,用户可以根据给予角色的权限访问特定标签。

到目前为止,我创建了两个表 USER_TABLE USER_ROLES

USER_TABLE 有以下字段:

  • id(主键)
  • USER_NAME
  • 密码
  • 如first_name
  • last_name
  • CREATED_DATE
  • role_id_fk(外键)

USER_ROLES 的字段如下:

  • id(主键)

  • role_name(例如ADMIN,TAB1_USER,TAB2_USER)

  • CREATED_DATE

此处,具有role_name“ ADMIN ”的用户可以看到所有选项卡,其他用户只能访问特定选项卡。

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

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

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

1 个答案:

答案 0 :(得分:24)

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

  1. 用户(用户ID(PK),用户名(唯一),密码(salted and hashed!),名字,姓氏,电话等')
  2. 角色(角色ID(PK),角色名称(唯一),角色描述)
  3. 权限(权限ID(PK),权限名称(唯一)) - 标签/屏幕/操作在这里
  4. 用户到角色(用户ID,角色ID) - PK是两个列合并
  5. 权限角色(角色ID,权限ID) - PK是两个列合并
  6. 但我的要求是尽可能灵活,这是一个仍在增长的系统(6年还在增加)。

    我想很多应用程序可以让用户将角色视为一对多的关系,而不是像我的情况那样多对多,但我不会在任何情况下将权限或角色转换为权限。应用