【发布时间】:2018-02-26 22:59:45
【问题描述】:
我使用 MEANjs 创建应用程序并使用 yo 生成器添加了 CRUD 模块。我还在应用程序中注册了两个用户。之后,我使用“用户 1”创建了一些记录。现在我需要允许“用户 2”更新“用户 1”的记录。默认情况下,这将是不允许的,但我需要覆盖该逻辑并允许每个具有“用户”角色的用户编辑每个现有记录,即使是那些不是由他创建的记录。我无法找到如何做到这一点。谁能分享一些见解?
【问题讨论】:
我使用 MEANjs 创建应用程序并使用 yo 生成器添加了 CRUD 模块。我还在应用程序中注册了两个用户。之后,我使用“用户 1”创建了一些记录。现在我需要允许“用户 2”更新“用户 1”的记录。默认情况下,这将是不允许的,但我需要覆盖该逻辑并允许每个具有“用户”角色的用户编辑每个现有记录,即使是那些不是由他创建的记录。我无法找到如何做到这一点。谁能分享一些见解?
【问题讨论】:
由于您似乎不希望每个用户都拥有“管理员”角色(授予完全控制权),因此您需要在 CRUD 模块中编辑策略文件。
使用文章模块有一个例子:
如果你去/modules/articles/server/policies/articles.server.policy.js,你需要更新角色“用户”的权限:
, {
roles: ['user'],
allows: [{
resources: '/api/articles',
permissions: ['get']
}, {
resources: '/api/articles/:articleId',
permissions: ['get']
}]
},
要允许任何用户编辑文章,请将“put”权限添加到数组中:
, {
resources: '/api/articles/:articleId',
permissions: ['get', 'put']
}
其他可能的解决方案是在文章模型架构(位于/modules/articles/server/models/article.server.model.js)中创建一个 ObjectId 数组,该数组将存储允许编辑文章的用户的所有 ID。像这样的:
allowedUsers: [{ type : ObjectId, ref: 'User' }]
但是,通过这种方式,您需要在策略文件中定义的 isAllowed 中间件中添加更多逻辑,以便每次有人更新文章时,您都会检查 article.allowedUsers 数组是否包含创建的用户的 id请求(req.user id)。
【讨论】: