79 lines
2.0 KiB
Markdown
79 lines
2.0 KiB
Markdown
# access
|
|
|
|
Kontrola dostępu oparta na rolach: hierarchia **admin > editor > user**.
|
|
Plugin wstrzykuje sztywne pole `roles` do klienckiej kolekcji auth i dostarcza
|
|
predykaty oraz gotowe funkcje dostępu (collection-level i field-level).
|
|
|
|
## Config (payload.config.ts)
|
|
|
|
```ts
|
|
ipalKit({
|
|
access: {
|
|
authCollection: 'users', // slug Twojej kolekcji auth
|
|
// defaultRole: 'user', // rola nowych użytkowników, domyślnie 'user'
|
|
},
|
|
})
|
|
```
|
|
|
|
Wstrzykuje pole `roles` (select hasMany, `saveToJWT`, tylko admin może
|
|
zmieniać role) do wskazanej kolekcji. Kolekcja należy do Ciebie
|
|
(create-payload-app) — plugin tylko dokłada pole.
|
|
|
|
> Po dodaniu: zadbaj, by seed / pierwszy user miał `roles: ['admin']`, inaczej
|
|
> stracisz dostęp do zasobów admin-only (np. SiteIntegrations).
|
|
|
|
## Predykaty (front / hooki / access)
|
|
|
|
```ts
|
|
import { isAdmin, isEditor, hasMinimumRole } from '@intecion/ipal-kit'
|
|
|
|
isAdmin(user) // admin?
|
|
isEditor(user) // editor lub admin (hierarchia)
|
|
hasMinimumRole(user, 'editor') // co najmniej editor
|
|
```
|
|
|
|
Przyjmują luźno typowanego usera (jak `req.user`), czytają `roles` defensywnie.
|
|
|
|
## Gotowe funkcje dostępu
|
|
|
|
### Collection-level (zwracają boolean | Where)
|
|
|
|
```ts
|
|
import { adminOnly, adminOrEditor, adminOrSelf, requireRole, authenticated } from '@intecion/ipal-kit'
|
|
|
|
export const Articles = {
|
|
slug: 'articles',
|
|
access: {
|
|
read: authenticated,
|
|
create: adminOrEditor,
|
|
update: adminOrEditor,
|
|
delete: adminOnly,
|
|
},
|
|
// ...
|
|
}
|
|
|
|
// Users: każdy widzi siebie, admin widzi wszystkich
|
|
access: { read: adminOrSelf }
|
|
|
|
// dowolny minimalny próg
|
|
access: { update: requireRole('editor') }
|
|
```
|
|
|
|
### Field-level (zwracają boolean)
|
|
|
|
```ts
|
|
import { adminOnlyField, adminOrEditorField, requireRoleField } from '@intecion/ipal-kit'
|
|
|
|
{
|
|
name: 'internalNote',
|
|
type: 'textarea',
|
|
access: { read: adminOnlyField, update: adminOnlyField },
|
|
}
|
|
```
|
|
|
|
## Hierarchia
|
|
|
|
```ts
|
|
import { ROLE_HIERARCHY } from '@intecion/ipal-kit'
|
|
// ['user', 'editor', 'admin'] — wyższa rola spełnia wymóg niższej
|
|
``` |