【发布时间】:2014-09-15 10:34:12
【问题描述】:
我认为可能是一个相对复杂的访问控制情况(没有太多经验,我可能完全错了)。如果这有什么不同的话,这个系统是一个私人/内部桌面唯一的应用程序。
我正在为人员跟踪证书的系统(使用粗体表示表格)。只有特定的用户可以访问此系统,使其受到一定程度的控制,但需要进一步控制。例如;并非所有用户都应该能够访问Personnel的证书,这应该仅限于HR。此外,某些用户可能会访问任何人员,但只能访问某些证书。
目前的想法是向 Certificates 和 Personnel 添加一个字段,该字段是具有权限/访问级别的 int。类似于this 设置。 User 表也会有一个“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
}
虽然之前没有做过这种复杂程度的访问控制,我不确定我是否朝着正确的方向前进?
【问题讨论】:
-
层次结构可能会起作用,例如如果您有一棵员工树,您是否希望经理能够看到他们直接下属的证书?
-
这在技术上是正确的。不过,它并没有真正归结为那种层次结构。 HR主要负责管理每个人的证书。也就是说,人事物流是需要访问某些证书的人,因为他们是与客户联络的人(但他们不需要访问说,简历 - 人力资源部门希望使用系统跟踪),即人符合这些证书的要求。
-
对于简单的系统,我通常使用
Privileges的表(PrivilegeId,Name,ShortName用于应用程序代码,Description)和UserPrivileges的表授予访问权限和一个表来控制谁可以授予/撤销权限,例如UserAdministersPrivilege。这避免了位掩码提供的位摆弄和位用完的可能性。我已经完成了许多具有隐式(默认情况下用户总是可以看到他们的分支机构/部门/公司的文档)和显式访问不同级别权限的层次结构的系统。
标签: c# access-control