import { AbilityBuilder, Ability } from '@casl/ability'; import { User } from '@prisma/client'; import { Recipe } from '../../app/recipe/recipe-model'; import { RecipeCollection } from '../../app/collection'; export function defineUserAbility(user: User) { const { build, can } = new AbilityBuilder(Ability); // recipes can('manage', Recipe, { ownerId: user.id }); can('create', Recipe); // recipe collections can('manage', RecipeCollection, { ownerId: user.id }); can('create', RecipeCollection); // user data can('manage', 'User', { _id: user.id }); return build(); } /** * Get default abilites for a request without an active user */ export function defineDefaultAbility() { const { build, can } = new AbilityBuilder(Ability); /** @todo: what can a non active user do? */ // can('manage', Recipe); return build(); }