gpt4 book ai didi

c# - 使用标志枚举权限有什么缺点?

转载 作者:行者123 更新时间:2023-11-30 22:34:25 24 4
gpt4 key购买 nike

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

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

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

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

所以我的问题是:

这样做有什么缺点吗(与拥有权限表和 RolePermission 链接表(对于授予角色的每个权限都包含 1 条记录)相反)?

最佳答案

三个直接的缺点:

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

让生活更轻松,使用单独的列表。在集合中分配给可以很好地归结为 myPermissions.Contains(new Permission("CanEdit"))。然后,您可以使用各种转换例程将硬编码值(例如枚举或字符串)转换为权限的对象表示,以实现 myPermissions.Contains("CanEdit") 等。

这并不是说选择标志而不是单独的表会影响性能,反之亦然,我不知道您在看哪种用法。

关于c# - 使用标志枚举权限有什么缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7834703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com