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

时间:2018-12-01 13:48:19

标签: sql sql-server

我想知道最好的方法以及使用多少个表来处理我的应用程序的权限。

我想授予用户访问以下任一权限的权限:

  • 一个项目
  • 特定客户的所有项目
  • 所有项目

我已经有一个用于项目的表,一个用于用户的表和一个用于客户的表。

您是否会创建3个新的权限表,例如“ Permission_Project”,“ Permission_Client”和“ Permission_All”还是组合表?

谢谢

1 个答案:

答案 0 :(得分:0)

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

UserID
Login
FirstName
LastName
...

然后使用以下几列创建带有安全组的表:

SecurityGroupID    SecurityGroupName    安全组说明    ...

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

ProjectID SecurityGroupID
100       10001
100       10002
...

表示项目ID 100由组1000110002

可见
ClientID SecrutiyGroupID
1001     10001
...

表示ID 1001的客户端在组10001中可见。最后,您需要的表是用户-安全组关联:

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

比较容易,对吧?

计划,早点解决这个问题。一旦增加了应用程序代码并开始运行系统,就可能很难更改您处理安全性和权限的方式。