复杂(?)访问控制

时间:2014-07-24 02:18:38

标签: c# access-control

我认为可能是一个相对复杂的访问控制情况(没有太多经验,我可能完全错了)。该系统是私有/内部桌面应用程序,如果这有任何区别。

我正在处理的系统跟踪人员证书(对表使用粗体)。只有某些用户可以访问此系统,使其受到一定程度的控制,但还需要进一步控制。例如;并非所有用户都应该能够访问管理员人员证书,这应该仅限于HR。此外,某些用户可能会访问任何人员,但只能访问某些证书

目前的想法是在证书& 人员,它是具有权限/访问级别的int。与this设置类似。 用户表格也会有一个" AccessLevel"字段,以便进行比较。

不确定访问级别的数量,目前正在考虑以下内容;

[Flags]
public enum AccessLevel
{
    None,
    ReadOnly,
    Normal, // Can view all Certificates and Personnel that aren't set to Management
    Management, // For "sensitive" Personnel and/or Certificates
    HR, // Full access
    Admin // Permission control/editing
}

之前没有对此级别的复杂性进行访问控制,我不确定我是否正朝着正确的方向前进?

1 个答案:

答案 0 :(得分:0)

您应该避免在代码中编写授权逻辑。相反,您应该尝试外部化您的授权。使用可扩展访问控制标记语言XACML。 XACML为您提供了可扩展的体系结构,丰富的策略语言,以满足您的授权用例(以及更多),以及更高级的。

使用XACML,您可以编写有关不同操作(查看,编辑,控制...)的规则,您可以选择对您来说重要的参数/属性。例如,你可以写:

  • 当且仅当user.id == document.owner.id
  • 时,用户才能编辑文档
  • 当且仅当user.location == document.location
  • 时,用户才能查看文档

我最近在Cloud Identity Summit上发表了关于外部化授权的演讲。您可以找到我的幻灯片here

HTH, 大卫。