2

The ability to add, update, and delete various entities in my application is often determined by the relationships defined between the various users involved. Here is an example:

  1. A basic user or his supervisor can create tasks associated to the user, but only his supervisor can lock down the task so that the basic user will not longer be able to add/update/delete it. Until locked down, both individuals will be able to update the task.

What is the best approach to implement these kind of complex and advanced rules that deal with the relationship of users and the state of the entities (new, existing), as well as other things like maybe a user-defined status associated to the entity?

Thanks

4

2 回答 2

3

实现这些处理用户关系和实体状态(新的、现有的)以及其他可能与实体相关联的用户定义状态的复杂和高级规则的最佳方法是什么?

您想使用授权标准,即 XACML,即可扩展访问控制标记语言。XACML 是:

  • OASIS 开发的标准,就像 SAML 一样
  • 一种专注于细粒度访问控制的标准:考虑用户信息、资源信息、状态和上下文信息的访问控制
  • 一种实现基于属性的访问控制(ABAC)模型的标准:用户信息、资源数据和状态都可以看作是属性
  • 使用策略和规则来构建属性并授予/拒绝访问的标准:XACML 是基于策略的
  • 可以跨多个层应用的标准,例如跨表示层、数据层、MVC 应用程序的业务层
  • 一种可应用于多种技术和语言的标准,例如 C#(MVC4 及更多)、Java、Python...

使用 XACML,您可以轻松实现关系,例如:当且仅当交易金额 < 员工批准限制且交易未锁定时,员工才能批准交易

然后去哪儿?

  • 查看 NIST 在ABAC上的页面。
  • 查看 OASIS XACML 的页面和规范
  • 查看现有的实现(开源和供应商,例如我工作的Axiomatics。)
于 2013-09-26T14:16:40.130 回答
0

在我工作的一家银行,我们有一个贷款管理系统,允许整个银行层级在其报告结构中查看贷款​​。例如,市场主管可以一次查看他/她所有报告的贷款组合。此外,她/他能够从所有报告(直接或间接)名称的列表中进行选择,以查看该员工的投资组合。

这很复杂,但我们必须维护一个报告结构的人力资源数据库。一旦我们有了它,我们就构建了用户函数(也可以作为存储过程完成,但用户函数在我们的 LINQ to SQL 后端运行良好)允许我们检查用户 x 是否监督用户 y。

因此,在您的示例中,只要您知道谁拥有该任务,并且可以访问一种可用于确定任务所有者是否向当前登录用户报告的方法,您应该能够轻松启用/禁用页面上的“锁定”按钮。

跑腿工作在于创建该报告结构数据库,并使其保持最新!

于 2013-09-25T19:31:11.637 回答