访问控制的标准做法(设计模式)
我正在查看我的界面设计,并且在确定要访问的a user和a的情况下subject,我正在努力确定哪种方法是实现基于角色的访问控制的最“正确”方法user。 据我所知,我有三个核心选择(第四个是前三个的混蛋,第五个是第四个的调整): 使用subject具有以下权限的列表来查询user:subject.allowAccess(user.getPermissionSet) user使用subject所需的权限列表查询-user.hasPermissionTo(subject.getRequiredPermissions()) 查询第三方以找到权限的交集- accessController.doPermissionSetsIntersect(subject.permissionSet, user.getPermissionSet()) 查询subject/ user,同时将“决定”委托给第三方类 有user尝试访问subject,并抛出一个错误,如果不允许访问 我倾向于选项四-具有subject包含一个accessController字段,在其中调用subject.userMayAccess(User user)将操作委托给la: class Subject { public function display(user) { if(!accessController.doPermissionSetsIntersect(this.permissionSet, user.getPermissionSet())) { display403(); //Or other.. eg, throw an error.. } } } ..但这又引发了进一步的问题: 应该accessController是字段还是静态类..? 是否应该subject 知道查看权限需要什么权限? 关于召唤,最少知识的原理在哪里起作用subject.display()?subject.display()曾经的呼叫者应该知道访问控制有效吗?(subject.display()最终的“模板方法” 在哪里) 具有subject.display()管理访问控制,在用户没有所需权限的情况下引发异常? 在这种情况下,什么被认为是“最佳实践”?实际执行检查的责任应该在哪里发生? 由于这既是一项学术性的专业知识,其又将逐步发展为实施,因此将不胜感激对设计模式的引用。