如何解决在 mongodb 上构建多个权限组的最佳方法是什么?
我启动了一个复杂的项目管理应用程序,但面临着为不同类型的用户配置文件构建资源权限管理的挑战。
我的挑战是:
用户故事
- John 是一个拥有共同用户资料的用户。
- John 在应用程序中创建了一个项目。
- John 创建了多个任务并将它们添加到项目中。
- John 添加了负责每项任务的用户。
- 添加的用户必须有权访问他们添加到的项目和任务。
- John 创建了一项特定任务并将其作为子任务添加到项目的一项任务中。
- 在此子任务中,John 添加了一个用户作为负责人,该用户自动必须有权访问子任务、任务和项目。
- John 可以随时限制对项目资源的访问,例如定义特定用户只能查看任务
我开始的方式。 我为每个用例创建了一个规范模式,在其中通知变量并返回真或假答案。
但是,我必须请求每个资源,在我看来,这不是表演性的。 我提到的是最简单的情况之一,还有其他更复杂的情况。
canEditTaskOnProject(): boolean {
if (!this.project) {
console.error(
`Project not provided on ${TaskPermission.name}.${this.canEditTaskOnProject.name}`
);
return false;
}
return new ProjectLeader(this.project,this.userId)
.or(new Creator(this.task,this.userId))
.or(new FullAccessTaskPermission(this.project,this.userId))
.or(new TaskResponsible(this.task,this.userId))
.or(
new RestrictTaskPermission(this.project,this.userId).and(
new Creator(this.task,this.userId).or(
new TaskResponsible(this.task,this.userId)
)
)
)
.or(
new ReadAndWriteTaskPermission(this.project,this.userId).and(
new TaskResponsible(this.task,this.userId)
)
)
.isSatisfiedBy(this.userId);
}
我非常希望已经做过类似事情的有经验的人提出建议。我是这个领域的初学者,在我工作的公司里,没有前辈。
先谢谢你!
解决方法
我找到了使用 casl 的最佳方法:
import { defineAbility } from '@casl/ability';
export default defineAbility((can,cannot) => {
can('read','Article');
cannot('read','Article',{ published: false }); // inverted rule
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。