我想设计一个网络应用程序的数据库,在其中用户可以访问特定的选项卡根据赋予角色的权限.

到目前为止,我已经创建了两个表USER_TABLEUSER_ROLES.

USER_TABLE包含以下字段:

  • ID(主键)
  • 用户名
  • 密码
  • 名字
  • 姓氏
  • 创建日期(_D)
  • Role_id_fk(外键)

USER_ROLES包含以下字段:

  • ID(主键)

  • 角色名称(例如管理员、TAB1用户、TAB2用户)

  • 创建日期(_D)

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

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

  • ID(主键)
  • PERMISSION_TYPE(ALL,TAB1,TAB2.)

或者,我应该在我的代码级进行管理吗?这两种方法的优缺点是什么?

推荐答案

As krokodilko wrote in his comment, it depends on the level of flexibility you need.
I have implemented role based permissions for one of my clients as follows:

  1. 用户(用户id(PK)、用户名(唯一)、密码(salted and hashed!)、名字、姓氏、电话等)
  2. 角色(角色id(PK)、角色名称(唯一)、角色描述)
  3. 权限(权限id(PK)、权限名称(唯一))-选项卡/屏幕/操作位于此处
  4. 用户到角色(用户id,角色id)-PK是两列的组合
  5. 角色到权限(角色id,权限id)-主键是两列的组合

但我的要求是尽可能灵活,而且这是一个仍在增长的系统(6年,而且还在不断增长).

我猜很多应用程序都可以将用户对角色作为一对多关系,而不是像我的情况那样是多对多关系,但我不会在任何应用程序中对权限或角色进行硬编码.

进一步的解释:Role based security database design关于#我知道什么?

Database相关问答推荐

安装postgresql用于使用和调试Apache-AGE

数据库设计:文件路径的首选字段长度

在 SQL Server 中以编程方式创建数据库

在不稳定的网络中保持分布式数据库同步

如何将 MySQL 5.5.40 升级到 MySQL 5.7

存储过程的缺点

Spring Boot:如何使用多个模式并在运行时动态 Select 使用哪一个

聊天的数据库模式:私有和群组

使用 2 个进程处理数据库

将图像文件存储在 Mongo 数据库中,这是个好主意吗?

与号 (&) 处的 XML 错误

mysql,dump,数据库restore恢复

在数据库中使用数组是不好的设计吗?

数据库与微服务的一致性

使用 C3P0 的 JDBC 连接池

数据库查询时间复杂度

使用批处理文件执行一组 SQL 查询?

LevelDB 支持 java 吗?

如何将空值传递给外键字段?

如何使用 liquibase,一个具体的例子