字段级别的Meteor权限(不是Collection.allow)

时间:2016-06-03 13:32:25

标签: meteor user-permissions

Collection.allow 提供了一种基于用户角色授权或不授权插入/更新/删除文档的方法。

但是,在这里,我正在寻找一种通用的解决方案,允许根据更精确的角色来读取或写入文档,而不是文档的字段。

示例:

  • 允许RoleA查看和编辑商品的价格。
  • 允许RoleB仅查看商品的价格。
  • 不允许RoleC查看/编辑商品价格,客户浏览器会收到包含价格以外所有字段的商品。

描述该示例的另一种方法是使用以下矩阵:

+-------------+---------------------+---------------+
| Schema Item | Field 'name'        | Field 'price' |
+-------------+---------------------+---------------+
+-------------+---------------------+---------------+
| Read        | RoleA, RoleB, RoleC | RoleA, RoleB  |
+-------------+---------------------+---------------+
| Write       | RoleA, RoleB, RoleC | Role A        |
+-------------+---------------------+---------------+

您将如何实施该矩阵,或者您选择哪种解决方案来拥有影响非文档但不影响字段的权限系统?

注意:问题是,因为应用程序有大约15种文档类型,以及10到20个用户配置文件,以避免疯狂的“if”复杂性。

此致

1 个答案:

答案 0 :(得分:0)

我会从alanning:roles包开始。然后,为了阅读,我将使用以下内容实现publish函数中的限制:

Meteor.publish('myPublication', function (group) {
  let fields = { name: 1};
  if ( !Roles.userIsInRole(this.userId, 'RoleC',group) ) fields.price = 1;

  if (Roles.userIsInRole(this.userId, ['RoleA','RoleB','RoleC'], group)) {
    return MyPublication.find({},fields);
  } else {
    this.ready();
  }
});

对于写作,我可能会使用aldeed:simple-schema并在autoValue函数中强制执行角色限制。

但是,我同意,没有通用的解决方案,您可以在角色x文档x字段的基础上创建权限表。这将成为一个有趣的包。