我正在实现一个 Intranet 站点的访问控制。如果公司没有 200 多名员工并且几乎每个人都没有自定义权限,这将很容易。这很疯狂,我知道,但我无法改变它。
所以,我试图找到一个可以满足我需求的通用实现,但找不到,所以我自己去做。最后,我想出了一个相当通用的解决方案,这让我想到:以前一定有人做过!
我称之为 STOP(主题任务对象权限)访问控制。我有以下关系:
.-------. .-----------. .-------.
| users |1---*| STOPRules |*---1| tasks |
`-------' '-----------' '-------'
STOP 规则具有以下属性
STOPRule {
Subject;
Task;
ObjectType;
Permission;
Relation;
}
对象关系可以是:所有者、创建者、修订者等。此字段不是必需的,以支持通用任务。当它在那里时,当前用户和对象实例之间的关系由委托计算。然后将当前关系与规则上所需的关系进行比较,以允许或拒绝访问。
如果我不够清楚,请告诉我。
出现两个问题:
有没有像这样的开源实现?
你看到我在这条路上会遇到什么问题吗?
编辑:我继续并实际上开始实施这个模型。第一个问题是我需要主客体之间的关系来支持任何用例。现在,我可以存储以下规则:
如果约翰(主体)是订单的创建者(关系),他可以(许可)编辑(任务)订单(对象) 。
拜托,你们能提供一个无法用这个模型表达的真实用例吗?