我有一个广泛的需求,需要一个灵活、合理细致的安全系统,使我们能够在系统内自定义某个角色或用户的操作权限。
面对这个要求,我必须选择架构中哪些对象、类或项作为安全系统的构建块 - 例如,如果授予某个角色访问X的权限,则X是什么?一个实体、一个控制器动作、自定义对象列表中的一个项等等。
我正在考虑的选项:
1)按实体的 CRUD 操作授权(例如,可以授予用户对账户实体的创建/读取/更新访问权限,对发票实体的读取访问权限,等等)
2)按实体的 CRUD 操作授权,并针对单个实体属性提供 RU 操作(例如,访问更新特定字段)- 可以通过实体上的属性标识符简化为“属性组”
3)按存储库和存储库函数授权(例如,允许调用 AccountsRepository.Get(...) 或 AccountsRepository.GetList(...) 等)
4)按 MVC 控制器 + 动作授权(例如,允许访问 /Accounts/Index 或 /Accounts/Update/X 等)
5)按自定义“安全对象”列表授权,可以与架构中的任意事物相关联
选项(5)提供了最大的灵活性,但实现最不通用。选项(4)非常有吸引力,因为安全项将紧密反映用户界面,但这意味着域不会保护访问,并且在非 Web 接口中不会应用安全性。
请问您在 MVC + DDD + 存储库模式中设计安全模式的意见和经验是什么?
面对这个要求,我必须选择架构中哪些对象、类或项作为安全系统的构建块 - 例如,如果授予某个角色访问X的权限,则X是什么?一个实体、一个控制器动作、自定义对象列表中的一个项等等。
我正在考虑的选项:
1)按实体的 CRUD 操作授权(例如,可以授予用户对账户实体的创建/读取/更新访问权限,对发票实体的读取访问权限,等等)
2)按实体的 CRUD 操作授权,并针对单个实体属性提供 RU 操作(例如,访问更新特定字段)- 可以通过实体上的属性标识符简化为“属性组”
3)按存储库和存储库函数授权(例如,允许调用 AccountsRepository.Get(...) 或 AccountsRepository.GetList(...) 等)
4)按 MVC 控制器 + 动作授权(例如,允许访问 /Accounts/Index 或 /Accounts/Update/X 等)
5)按自定义“安全对象”列表授权,可以与架构中的任意事物相关联
选项(5)提供了最大的灵活性,但实现最不通用。选项(4)非常有吸引力,因为安全项将紧密反映用户界面,但这意味着域不会保护访问,并且在非 Web 接口中不会应用安全性。
请问您在 MVC + DDD + 存储库模式中设计安全模式的意见和经验是什么?