2017-09-02 188 views
0

我想设计一个Web应用程序的数据库,用户可以根据授予角色的权限访问特定的选项卡。最佳用户角色权限数据库设计实践?

我做了什么至今我创建了两个表USER_TABLEUSER_ROLES

USER_TABLE有以下字段:

  • ID(主键)
  • USER_NAME
  • 密码
  • FIRST_NAME
  • 姓氏
  • CREATED_DATE
  • role_id_fk(外键)

USER_ROLES具有低于字段:

  • ID(主键)

  • ROLE_NAME(例如ADMIN,TAB1_USER,TAB2_USER)

  • CREATED_DATE

这里,有用户ROLE_NAME “ADMIN” 可以看到所有的标签,其他用户只能访问特定的标签。

我的问题是我需要创建一个表USER_PERMISSIONS具有USER_ROLES表下面的字段外键:

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

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

+0

这取决于您的要求。如果您只想实现在运行时无法更改的静态权限,则将所有应用程序的函数绑定到代码中的角色。优点 - 易于实现,缺点 - 每次更改特权都需要更改代码。如果您想要动态权限(可以在运行时更改)(例如,管理员可以直接在应用程序中编辑各个角色的权限),那么您需要USER_PERMISSIONS表,并将代码中的每个应用程序函数绑定到某个权限而不是角色。 – krokodilko

回答

1

正如krokodilko在他的回答中写道的,这取决于您需要的灵活程度。
为我的客户之一,我已经实现了基于角色的权限如下:

  1. 用户(用户ID,用户名,密码,手机等“)
  2. 角色(角色ID,角色名称(唯一的),角色介绍)
  3. 许可(许可ID,权限名称) - 选项卡/屏幕/动作放在这里
  4. 用户到角色(用户ID,角色ID)
  5. 角色到权限(角色ID,允许ID)

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

我想很多应用程序可以让用户扮演一对多的关系角色,而不是像我这样的多对多角色,但我不会在任何应用程序中努力编写权限或角色来授予权限。