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