对权限使用标志枚举的缺点是什么?

本文关键字:缺点 是什么 枚举 标志 权限 | 更新日期: 2023-09-27 18:11:54

在尝试实现基于角色的安全为web应用程序,我有一个数据库中的权限,角色,用户和UserRole表(即用户的角色分配)。

每个角色都有一组权限。权限被定义为c#标志枚举,值如0、1、2、4等。

在数据库中,角色表有一个int字段,用于存储角色的组合权限标志。(这样我们就避免了单独的Permissions表(这是好还是坏?)和RolePermissions的一对多表。

在代码中,我通过计算分配给用户的角色的有效权限来检查用户是否具有访问权限。在。net中,通过对枚举标志进行逻辑操作,可以很容易地做到这一点。

我的问题是:

这样做是否有缺点(相对于拥有Permission表和RolePermission链接表(每个角色的权限包含1条记录)?

对权限使用标志枚举的缺点是什么?

三个直接的缺点:

  • 标志只能包含与可用位相同数量的项。
  • 从数据库查询现在变得有点烦人。好吧,只有当您手动使用SQL(连接到角色表以确定成员资格读起来要好得多)。
  • 当查看不作为标志的数据时,有人会记得第四个位1的值是什么意思吗?

让生活变得简单,使用单独的列表。可以很好地归结为myPermissions.Contains(new Permission("CanEdit"))。然后,您可以使用各种转换例程将硬编码值(如枚举或字符串)转换为权限的对象表示形式,以实现myPermissions.Contains("CanEdit")等。

这并不是说在单独的表上选择标志会影响性能,反之亦然,我不知道你在看什么样的用法

唯一的缺点是您最终将编写更多的代码来检查权限。使用单独的用户角色表可以非常简单地确定用户角色。

  • 优势:节省存储空间(但谁在乎这个在这个场景?)
  • 缺点:代码更复杂。

我使用了一个标志枚举,就像你3年前在一个项目中描述的那样。我的考虑:

  • 创建一个层来简化使用,否则你会在前端得到一个混乱的代码
  • 这对"新开发者"来说并不直观。如果其他人要维护这段代码,要知道他可能会错过整个想法,并引入更多的复杂性和/或bug…

Ps:

每个角色都有一组权限。权限被定义为c#标志枚举,值如0、1、2、4等。

从不用0国旗enum…