如何让更多用户使用casl react编辑一篇文章
How to allow more users to edit an article with casl react
我正在使用 CASL rect 在我的 javascript 项目中设置授权。
当我不得不询问用户是否因为他是作者而有权编辑文章时,这很好。
但是当我有不止一位作者时,我如何检查当前用户是否可以编辑这篇文章?
<Can I='edit' a={{ editor_ids: article.editor_ids, type: 'Article' }}
我不明白如何检查当前用户id是否在editor_ids能力中。
can('edit', 'Article', { editor_ids: ....something here for currentUser.id .... })
您可以在 Supported operators and in Common conditions
中找到有关此内容的详细信息
在您的特定示例中:
定义能力:
import { defineAbility } from '@casl/ability'
const options = {
// https://casl.js.org/v4/en/guide/subject-type-detection
detectSubjectType: /* logic to detect subject type */
}
export const createAbilityFor = (currentUser) => defineAbility(options, (can) => {
can('edit', 'Article', { editor_ids: currentUser.id }) // can edit article if user.id is in editor_ids
})
检查权限:
// createAbilityFor is a function from prev example
const currentUser = { id: 1 }
const ability = createAbilityFor(currentUser);
ability.can('edit', { type: 'Article', editor_ids: [1, 2, 3] }) // true
ability.can('edit', { type: 'Article', editor_ids: [3, 4, 5] }) // false
我正在使用 CASL rect 在我的 javascript 项目中设置授权。
当我不得不询问用户是否因为他是作者而有权编辑文章时,这很好。
但是当我有不止一位作者时,我如何检查当前用户是否可以编辑这篇文章?
<Can I='edit' a={{ editor_ids: article.editor_ids, type: 'Article' }}
我不明白如何检查当前用户id是否在editor_ids能力中。
can('edit', 'Article', { editor_ids: ....something here for currentUser.id .... })
您可以在 Supported operators and in Common conditions
中找到有关此内容的详细信息在您的特定示例中:
定义能力:
import { defineAbility } from '@casl/ability' const options = { // https://casl.js.org/v4/en/guide/subject-type-detection detectSubjectType: /* logic to detect subject type */ } export const createAbilityFor = (currentUser) => defineAbility(options, (can) => { can('edit', 'Article', { editor_ids: currentUser.id }) // can edit article if user.id is in editor_ids })
检查权限:
// createAbilityFor is a function from prev example const currentUser = { id: 1 } const ability = createAbilityFor(currentUser); ability.can('edit', { type: 'Article', editor_ids: [1, 2, 3] }) // true ability.can('edit', { type: 'Article', editor_ids: [3, 4, 5] }) // false