现场级别的流星许可(不是 Collection.allow )

Meteor permission at field level (not Collection.allow )

Collection.allow 提供了一种方法来授权或不授权文档的 insert/updated/delete,例如,基于用户角色。

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

示例:

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

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

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

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

此致

我将从 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 and enforce the role restrictions in an autoValue 函数。

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