我需要在风帆中使用行级权限。我已经查看了this和其他线程,但是每个人都说只是使用策略。 但我所需要的并不仅仅是限制例如查找/更新表的所有元素,但每个数据库行具有权限,以考虑权限关联。
如果权限支持ember data adapter,嵌套的create / update / find(带有populate)和套接字等蓝图,那就太棒了。
例如:
GET /:model/:id
应该返回并填充满足某些相关条件的条目。
例如,我们有4个模型:
User (columns: id, name, email, pwd_hash, ...)
Project (columns: id, client, name, ...)
UserAssignment (columns: id, user, project, user_perms, ...)
Client (columns: id, name, ...)
User
和Project
通过UserAssignment
链接 - 一个高级的MM表。 (User
可能对不同的项目有特殊的user_perms,例如read,write,manage)。 Project
总是有一个Client
。
这是相应的帆模型:
// User.js
attributes: {
name: 'string'
}
// Project.js
attributes: {
name: 'string',
client: {
model: 'client'
},
userAssignments: {
collection: 'userAssignment',
via: 'project'
}
}
// UserAssignment.js
attributes: {
userPerms: 'integer',
user: {
model:'user'
},
project: {
model:'project'
}
}
// Client.js
attributes: {
name: 'string',
projects: {
collection: 'project',
via: 'client'
}
}
让我们说ID为1的User
想要访问他允许看到的Clients
列表,他调用
GET /clients/
在SQL中说:
SELECT client.*
FROM client
INNER JOIN project ON project.client = client.id
INNER JOIN user_assignment ON project.id = user_assignment.project
WHERE user_assignment.user = 1 and user_perms > 4
GROUP BY client.id;
然后,如果我们有某些Project
经理,他们可以更新关联的UserAssignment
等。
基本上我认为权限可以基于角色关联。
我尝试了几种方法来实现此功能。我为所有行尝试了_permission_read
,_permission_write
列,并为此使用了填充,但似乎没有任何工作正常。
上面的例子只是许多不同类型模型的摘录,我可以根据SQL过滤,不能很好地使用Sails / Waterline。
提前致谢!