我对ACL检查流程的设计有疑问。目前,我将对象保存在一个表中,并将关联的ACL对象保存在2个单独的表中,该对象具有给定用户的权限。为了检查权限,我使用了1个DB调用,在该调用中我同时连接了两个表并检查给定的用户是否有权访问给定的对象。我认为最好将数据库调用和ACL检查外包给两个不同的函数fx(伪代码):
func getAllObjects(requester_id) {
objects = getAllObjects()
results = []
for each obj in objects {
ok = checkPermission(obj.id, requester_id, "read")
if ok {
add_obj_to_results
}
}
return results
}
func checkPermission(object_id, requester_id, required_scopes) {
// check acl checks the db if there is a acl with the required permissions for a given user
ok = checkACL(object_id, requester_id, required_scopes)
}
这是正确的方法吗?极限或偏移量之类的语句呢?他们不会再正常工作了,或者?有关此主题的最佳做法?