sails.js中的行级权限

时间:2014-12-10 09:48:31

标签: mysql ember.js sails.js acl waterline

我需要在风帆中使用行级权限。我已经查看了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, ...)

UserProject通过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。

  • 我是否需要自定义SQL查询?
  • 是否可以用Sails整齐地做到这一点?
  • 我是否误解了政策,是否有办法实施这些要求?
  • 或者我应该使用SQL视图而不是表格?

提前致谢!

0 个答案:

没有答案