实际问题
- 如何“映射”访问限制以便可以从 php 和 javasript 使用?
- 我应该使用哪种方法在 php 和 javascript 之间共享访问限制/规则?
解释
我使用 php 创建了一个 RESTful 后端,它将使用上下文感知访问控制来限制数据访问和修改。例如,一个人可以修改属于他的地址信息,并且可以查看(但不能修改)同一组中所有其他人的地址信息。当然,组管理员可以修改该组中所有人员的地址详细信息。
现在,php 方面非常“简单”,因为这只是一堆检查。Javascript 方面也很“简单”,因为它也只是一堆检查。这里真正的问题是如何让这些支票来自同一个地方?
Javascript 使用检查来显示/隐藏编辑/保存按钮。PHP 使用检查来进行实际更改。
是的,我知道如果我在服务器上运行 javascript(NodeJS 等),情况会更简单,但是后端已经完成,此时改变方式会导致重大挫折。
也许有人已经设计了一种以“被动”方式对访问检查进行建模的方法,然后只使用某种“编译器”来运行实际检查?
编辑:
值得一提的是,前端(js)部分是用AngularJS构建的......
编辑2
这是一些伪代码,用于澄清我认为我正在寻找的内容,但完全不确定这是否可以大规模实现。从好的方面来说,所有访问限制都将集中在一个地方,并且在需要时易于修改。在黑暗的一面,我将不得不用两种语言编写 AccessCheck 和 canAct 函数,或者想出一种方法来 JIT 将一些伪代码编译为 javascript 和 php :)
AccessRestrictions = {
Address: {
View: [
OWNER, MEMBER_OF_OWNER_PRIMARY_GROUP
],
Edit: [
OWNER, ADMIN_OF_OWNER_PRIMARY_GROUP
]
}
}
AccessCheck = {
OWNER: function(Owner) {
return Session.Person.Id == Owner.Id;
},
MEMBER_OF_OWNER_PRIMARY_GROUP: function(Owner) {
return Session.Person.inGroup(Owner.PrimaryGroup)
}
}
canAct('Owner', 'Address', 'View') {
var result;
AccessRestrictions.Address.View.map(function(role) {
return AccessCheck[role](Owner);
});
}