在系统中实施权限的最佳实践?

Mah*_*vej 5 security permissions

我有一个包含不同类型权限的应用程序。正如 (Role Bases Security) RBC 中提到的,我将用户分组为不同的角色并为角色分配不同的权限。(和权限是这种风格:

public enum Permission {
     View = 1,
     Create =2,
     Edit =4,
     Delete =8,
     Print = 16
}
Run Code Online (Sandbox Code Playgroud)

在简单的系统中一切正常,但是当系统变得有点复杂时,系统会获得特定的权限,例如:

  • 仅查看发出的发票
  • 查看所有发票
  • 仅编辑发出的发票
  • 编辑所有发票
  • 创建销售发票
  • 创建采购发票
  • 创建形式
  • 在他自己的发票上创建销售报告
  • 创建每日销售报告
  • 创建月度销售报告 -....

如您所见,系统中出现了不同类型的权限(它可以增长到大约 200 个不同的权限)。所以问题是:

  • 我不能把它们都放在一个 enum 中。然后不能使用二进制模式 (1,2,4,8,..) 因为在最好的情况下 (int64) 它支持多达 64 种不同的权限。
  • 一个大的枚举(大约有 200 个项目)在编码方面不太好

在这种情况下你有什么想法?

提前致谢 :-)

Nic*_*oiu 1

我不确定为什么您觉得需要尝试将所有权限推入单个标志(或者我是从 vales 推断)枚举中。权限请求和授予可以使用列表而不是单个 ORed 值来表示。如果您使用列表方法,您可以自由地创建您喜欢的任何权限表示形式。例如,您可以使用非标志枚举甚至多个枚举来表示您的权限。