为权限设置数据库表的最佳方式



我想知道处理应用程序权限的最佳方式以及使用多少表。

我想让用户访问其中一个:

  • 单个项目
  • 某个客户的所有项目
  • 所有项目

我已经有了一个项目表、一个用户表和一个客户端表。

您会创建3个新的权限表,例如"Permission_Project"、"Permission_Client"one_answers"Permission_All",还是创建一个组合表?

谢谢

最好先与用户一起创建一个表。例如,包含以下列的表:

UserID
Login
FirstName
LastName
...

然后创建一个包含安全组的表,其中包含以下列:

安全组ID安全组名称SecurityGroupDescription…

然后,在权限表中,可以存储例如每个安全组可见的项目和客户端。例如:

ProjectID SecurityGroupID
100       10001
100       10002
...

意味着项目ID100由组1000110002和可见

ClientID SecrutiyGroupID
1001     10001
...

意味着ID为CCD_ 4的客户端对于组CCD_。您需要的最后一个表是用户-安全组关联:

UserID SecurityGroupID

因此,您需要创建两个接口:

  • 管理安全组中的用户成员身份
  • 管理项目和客户端对安全组的可见性

为了更容易地使用表,通常会使用输入参数user-id创建一个函数,该函数输出给定用户的可见客户端/项目。

此外,请考虑在权限表中添加访问类型,例如viewdeny。因此,您可以使用查看特定项目的所有客户端的组成员,同时使拒绝访问同一项目中特定客户端的组的用户成员。

更容易的做法是授予对包含30个客户端的项目的访问权限,然后拒绝其中一个客户端的访问,然后授予29个客户端的权限。此外,与用户组一起工作比与许多用户一起工作更方便。例如,在你的应用程序中,你可能有这样的代码:

If member of group 'show all clients' then render this HTML

哪个更好:

if used id in (101,102,103,104...) render this HTML

这更容易,对吧?

计划好了,在结束之前。一旦增加了应用程序代码并且系统开始工作,就可能很难更改处理安全性和权限的方式。

最新更新