Ayudante de asignaturas de capacidad CASL con condiciones

1

Estoy probando el uso de "@ casl / skill" para RBAC en express. De acuerdo con los documentos CASL, debería poder definir restricciones condicionales sobre atributos frente a acciones sobre sujetos y, en los casos en que no se usan clases, se puede usar una función auxiliar de sujeto para envolver los DTO.

referencia: https://casl.js.org/v4/en/guide/subject-type-detection

Probé el ejemplo muy simple a continuación que debería haber funcionado. Pero no es así. ¿Lo estoy entendiendo incorrectamente de alguna manera?

import { Ability, subject } from "@casl/ability";

const ability = new Ability([
  {
    action: "write",
    subject: "docs",
    conditions: {
      publisherId: 53
    }
  }
]);

const docs = {};
// Also, if the third argument is skipped for 'fields', it throws an error
console.log(
  ability.can("write", subject("docs", docs), "", { publisherId: 53 })
);

Tengo una caja de arena aquí https://codesandbox.io/s/casl-test-conditions-uzc8v?file=/src/index.js:0-286

2

Utiliza incorrectamente ability.can Verifique los documentos de la API . Es por eso que lanza con el mensaje de error que dice que usas incorrectamente can.

Para arreglar su ejemplo:

import { Ability, subject } from "@casl/ability";

const ability = new Ability([
  {
    action: "write",
    subject: "docs",
    conditions: {
      publisherId: 53
    }
  }
]);

const docs = subject('docs', {
  publisherId: 53
}); //  “docs” type instance

console.log(
  ability.can("write", docs)
);