@zealamic/payload-auth-rbac-plugin 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -2
- package/dist/collections/users/index.js +11 -8
- package/dist/collections/users/index.js.map +1 -1
- package/dist/components/role-permission-matrix-client/default-data.js +2 -2
- package/dist/components/role-permission-matrix-client/default-data.js.map +1 -1
- package/dist/components/role-permission-matrix-client/index.js +2 -2
- package/dist/components/role-permission-matrix-client/index.js.map +1 -1
- package/dist/components/role-permission-matrix-client/matrix.module.scss +1 -4
- package/dist/components/role-permission-matrix-client/types.d.ts +4 -6
- package/dist/components/role-permission-matrix-client/types.js.map +1 -1
- package/dist/general-types.d.ts +5 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.js.map +1 -1
- package/package.json +21 -40
- package/assets/cover-photo.jpg +0 -0
- package/docs/COLLECTIONS.md +0 -440
- package/docs/TRANSLATIONS.md +0 -462
- package/docs/UTILS.md +0 -226
package/README.md
CHANGED
|
@@ -61,7 +61,22 @@ export default buildConfig({
|
|
|
61
61
|
});
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
-
### 2.
|
|
64
|
+
### 2. Migration
|
|
65
|
+
|
|
66
|
+
After adding the plugin to `payload.config.ts`, run a Payload migration if your database schema is not up to date:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
npm run payload migrate:create
|
|
70
|
+
# or: yarn payload migrate:create
|
|
71
|
+
# or: pnpm payload migrate:create
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Then apply the migration with `migrate` (or your project's usual migration workflow).
|
|
75
|
+
|
|
76
|
+
> **Bootstrap a super admin:** RBAC collections are restricted to super admins by default. Set `isSuperAdmin: true` on at least one user (via seed script, Local API, or direct database update) before you can manage roles, permissions, and the permission matrix in Admin.
|
|
77
|
+
> → See [COLLECTIONS — Bootstrap super admin](https://github.com/zealamic/payload-auth-rbac-plugin/blob/main/docs/COLLECTIONS.md#bootstrap-super-admin)
|
|
78
|
+
|
|
79
|
+
### 3. Seed RBAC data (Admin or script)
|
|
65
80
|
|
|
66
81
|
1. **permission-features** — e.g. `posts`, `users` (`code` = `featureCode` in access helpers)
|
|
67
82
|
2. **permission-actions** — e.g. `create`, `read`, `update`, `delete`
|
|
@@ -71,7 +86,7 @@ export default buildConfig({
|
|
|
71
86
|
|
|
72
87
|
→ Full collection reference: **[COLLECTIONS](https://github.com/zealamic/payload-auth-rbac-plugin/blob/main/docs/COLLECTIONS.md)**
|
|
73
88
|
|
|
74
|
-
###
|
|
89
|
+
### 4. Protect app collections
|
|
75
90
|
|
|
76
91
|
```ts
|
|
77
92
|
import { getPermissionAccess } from "@zealamic/payload-auth-rbac-plugin";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getArrayOfMergedFieldAffectingData, getPermissionAccess, toLocaleRecord } from "../../lib/utils/index.js";
|
|
2
2
|
import { mergeUserCollectionHooks } from "./parent-path.js";
|
|
3
|
-
const buildDefaultFields = (translations)=>{
|
|
3
|
+
const buildDefaultFields = (translations, userSlug)=>{
|
|
4
4
|
const locales = Object.keys(translations);
|
|
5
5
|
return [
|
|
6
6
|
{
|
|
@@ -22,7 +22,8 @@ const buildDefaultFields = (translations)=>{
|
|
|
22
22
|
{
|
|
23
23
|
name: "parent",
|
|
24
24
|
type: "relationship",
|
|
25
|
-
relationTo:
|
|
25
|
+
relationTo: userSlug,
|
|
26
|
+
hasMany: false,
|
|
26
27
|
label: toLocaleRecord(locales, (locale)=>translations[locale]?.fields?.parent?.label),
|
|
27
28
|
filterOptions: ({ id })=>id ? {
|
|
28
29
|
id: {
|
|
@@ -55,11 +56,10 @@ export const modifyUsersCollection = (params = {})=>{
|
|
|
55
56
|
"isSuperAdmin",
|
|
56
57
|
"updatedAt"
|
|
57
58
|
],
|
|
58
|
-
useAsTitle: "email"
|
|
59
|
-
...config.admin
|
|
59
|
+
useAsTitle: "email"
|
|
60
60
|
};
|
|
61
61
|
const pluginFields = getArrayOfMergedFieldAffectingData({
|
|
62
|
-
defaultFields: buildDefaultFields(translations),
|
|
62
|
+
defaultFields: buildDefaultFields(translations, userSlug),
|
|
63
63
|
fields: customFields
|
|
64
64
|
});
|
|
65
65
|
const existing = (config.collections || []).find((c)=>c.slug === userSlug);
|
|
@@ -100,11 +100,14 @@ export const modifyUsersCollection = (params = {})=>{
|
|
|
100
100
|
return {
|
|
101
101
|
...collection,
|
|
102
102
|
fields: [
|
|
103
|
-
...
|
|
104
|
-
...
|
|
103
|
+
...pluginFields,
|
|
104
|
+
...collection.fields
|
|
105
105
|
],
|
|
106
106
|
access: {
|
|
107
|
-
|
|
107
|
+
create: collection.access?.create ?? defaultAccess.create,
|
|
108
|
+
read: collection.access?.read ?? defaultAccess.read,
|
|
109
|
+
update: collection.access?.update ?? defaultAccess.update,
|
|
110
|
+
delete: collection.access?.delete ?? defaultAccess.delete,
|
|
108
111
|
...collection.access
|
|
109
112
|
},
|
|
110
113
|
hooks: mergeUserCollectionHooks({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collections/users/index.ts"],"sourcesContent":["import type { Config, Field
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/users/index.ts"],"sourcesContent":["import type { Config, Field } from \"payload\";\nimport {\n getArrayOfMergedFieldAffectingData,\n getPermissionAccess,\n toLocaleRecord,\n} from \"../../lib/utils/index.js\";\nimport { mergeUserCollectionHooks } from \"./parent-path.js\";\nimport type {\n UsersModificationParams,\n UsersModificationTranslations,\n} from \"./types.js\";\n\nconst buildDefaultFields = (\n translations: UsersModificationTranslations,\n userSlug: string,\n): Field[] => {\n const locales = Object.keys(translations);\n return [\n {\n name: \"isSuperAdmin\",\n type: \"checkbox\",\n defaultValue: false,\n label: toLocaleRecord(\n locales,\n (locale) => translations[locale]?.fields?.isSuperAdmin?.label,\n ),\n admin: {\n readOnly: true,\n },\n },\n {\n name: \"roles\",\n type: \"relationship\",\n relationTo: \"roles\",\n hasMany: true,\n label: toLocaleRecord(\n locales,\n (locale) => translations[locale]?.fields?.roles?.label,\n ),\n },\n {\n name: \"parent\",\n type: \"relationship\",\n relationTo: userSlug,\n hasMany: false,\n label: toLocaleRecord(\n locales,\n (locale) => translations[locale]?.fields?.parent?.label,\n ),\n filterOptions: ({ id }) => (id ? { id: { not_equals: id } } : true),\n },\n {\n name: \"parentPath\",\n type: \"text\",\n index: true,\n admin: {\n hidden: true,\n readOnly: true,\n },\n },\n ];\n};\n\nexport const modifyUsersCollection = (params: UsersModificationParams = {}) => {\n const { translations = {}, fields: customFields = [] } = params;\n\n return (incomingConfig: Config): Config => {\n const config = { ...incomingConfig };\n const userSlug = config.admin?.user || \"users\";\n\n const customAdmin = {\n defaultColumns: [\"email\", \"roles\", \"isSuperAdmin\", \"updatedAt\"],\n useAsTitle: \"email\",\n };\n\n const pluginFields = getArrayOfMergedFieldAffectingData({\n defaultFields: buildDefaultFields(translations, userSlug),\n fields: customFields,\n });\n\n const existing = (config.collections || []).find(\n (c) => c.slug === userSlug,\n );\n\n const dataScopeOptions = {\n createdByField: \"id\",\n usersCollectionSlug: userSlug,\n } as const;\n\n const defaultAccess = {\n create: getPermissionAccess({\n featureCode: userSlug,\n actionCode: \"create\",\n }),\n update: getPermissionAccess({\n featureCode: userSlug,\n actionCode: \"update\",\n mode: \"modify\",\n collectionSlug: userSlug,\n options: dataScopeOptions,\n }),\n delete: getPermissionAccess({\n featureCode: userSlug,\n actionCode: \"delete\",\n mode: \"modify\",\n collectionSlug: userSlug,\n options: dataScopeOptions,\n }),\n read: getPermissionAccess({\n featureCode: userSlug,\n actionCode: \"read\",\n options: dataScopeOptions,\n }),\n };\n\n if (existing) {\n config.collections = (config.collections || []).map((collection) => {\n if (collection.slug !== userSlug) {\n return collection;\n }\n return {\n ...collection,\n fields: [...pluginFields, ...collection.fields],\n access: {\n create: collection.access?.create ?? defaultAccess.create,\n read: collection.access?.read ?? defaultAccess.read,\n update: collection.access?.update ?? defaultAccess.update,\n delete: collection.access?.delete ?? defaultAccess.delete,\n ...collection.access,\n },\n hooks: mergeUserCollectionHooks({\n existingHooks: collection.hooks,\n userSlug,\n }),\n };\n });\n } else {\n config.collections = [\n ...(config.collections || []),\n {\n slug: userSlug,\n auth: true,\n admin: customAdmin,\n fields: pluginFields,\n access: defaultAccess,\n hooks: mergeUserCollectionHooks({ userSlug }),\n },\n ];\n }\n\n return config;\n };\n};\n"],"names":["getArrayOfMergedFieldAffectingData","getPermissionAccess","toLocaleRecord","mergeUserCollectionHooks","buildDefaultFields","translations","userSlug","locales","Object","keys","name","type","defaultValue","label","locale","fields","isSuperAdmin","admin","readOnly","relationTo","hasMany","roles","parent","filterOptions","id","not_equals","index","hidden","modifyUsersCollection","params","customFields","incomingConfig","config","user","customAdmin","defaultColumns","useAsTitle","pluginFields","defaultFields","existing","collections","find","c","slug","dataScopeOptions","createdByField","usersCollectionSlug","defaultAccess","create","featureCode","actionCode","update","mode","collectionSlug","options","delete","read","map","collection","access","hooks","existingHooks","auth"],"mappings":"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"}
|
|
@@ -7,12 +7,12 @@ export const rolePermissionMatrixClientDefaultTranslations = {
|
|
|
7
7
|
placeholder: "Loading permission matrix..."
|
|
8
8
|
},
|
|
9
9
|
title: "Permission Matrix",
|
|
10
|
+
featuresLabel: "Features",
|
|
10
11
|
features: {
|
|
11
|
-
label: "Features",
|
|
12
12
|
users: "Users"
|
|
13
13
|
},
|
|
14
|
+
actionsLabel: "Actions",
|
|
14
15
|
actions: {
|
|
15
|
-
label: "Actions",
|
|
16
16
|
create: "Create",
|
|
17
17
|
read: "Read",
|
|
18
18
|
update: "Update",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/role-permission-matrix-client/default-data.ts"],"sourcesContent":["import type { RolePermissionMatrixClientTranslations } from \"./types.js\";\n\nexport const rolePermissionMatrixClientDefaultTranslations: RolePermissionMatrixClientTranslations =\n {\n en: {\n viewInUpdateScreenOnly: {\n label: \"View permission matrix in update screen only\",\n },\n loading: {\n placeholder: \"Loading permission matrix...\",\n },\n title: \"Permission Matrix\",\n
|
|
1
|
+
{"version":3,"sources":["../../../src/components/role-permission-matrix-client/default-data.ts"],"sourcesContent":["import type { RolePermissionMatrixClientTranslations } from \"./types.js\";\n\nexport const rolePermissionMatrixClientDefaultTranslations: RolePermissionMatrixClientTranslations =\n {\n en: {\n viewInUpdateScreenOnly: {\n label: \"View permission matrix in update screen only\",\n },\n loading: {\n placeholder: \"Loading permission matrix...\",\n },\n title: \"Permission Matrix\",\n featuresLabel: \"Features\",\n features: {\n users: \"Users\",\n },\n actionsLabel: \"Actions\",\n actions: {\n create: \"Create\",\n read: \"Read\",\n update: \"Update\",\n delete: \"Delete\",\n },\n },\n };\n"],"names":["rolePermissionMatrixClientDefaultTranslations","en","viewInUpdateScreenOnly","label","loading","placeholder","title","featuresLabel","features","users","actionsLabel","actions","create","read","update","delete"],"mappings":"AAEA,OAAO,MAAMA,gDACX;IACEC,IAAI;QACFC,wBAAwB;YACtBC,OAAO;QACT;QACAC,SAAS;YACPC,aAAa;QACf;QACAC,OAAO;QACPC,eAAe;QACfC,UAAU;YACRC,OAAO;QACT;QACAC,cAAc;QACdC,SAAS;YACPC,QAAQ;YACRC,MAAM;YACNC,QAAQ;YACRC,QAAQ;QACV;IACF;AACF,EAAE"}
|
|
@@ -131,12 +131,12 @@ export const RolePermissionMatrixClient = ()=>{
|
|
|
131
131
|
children: [
|
|
132
132
|
/*#__PURE__*/ _jsx("th", {
|
|
133
133
|
className: styles[`${RBAC_PREFIX}-table-th-feature`],
|
|
134
|
-
children: t(`components:rolePermissionMatrix:
|
|
134
|
+
children: t(`components:rolePermissionMatrix:featuresLabel`)
|
|
135
135
|
}),
|
|
136
136
|
/*#__PURE__*/ _jsx("th", {
|
|
137
137
|
className: styles[`${RBAC_PREFIX}-table-th-action`],
|
|
138
138
|
colSpan: actions.filter((action)=>action.type === TYPE.MAIN).length,
|
|
139
|
-
children: t(`components:rolePermissionMatrix:
|
|
139
|
+
children: t(`components:rolePermissionMatrix:actionsLabel`)
|
|
140
140
|
})
|
|
141
141
|
]
|
|
142
142
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/role-permission-matrix-client/index.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useConfig,\n useDocumentInfo,\n useField,\n useTranslation,\n} from \"@payloadcms/ui\";\nimport { Fragment, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport type { PermissionAction } from \"../../collections/permission-actions/types.js\";\nimport type { PermissionFeature } from \"../../collections/permission-features/types.js\";\nimport type { Permission } from \"../../collections/permissions/types.js\";\nimport type { RolePermission } from \"../../collections/roles-permissions/types.js\";\nimport { STATUS as PERMISSION_STATUS } from \"../../lib/constants/permission.js\";\nimport {\n STATUS as PERMISSION_ACTION_STATUS,\n TYPE,\n} from \"../../lib/constants/permission-action.js\";\nimport { STATUS as PERMISSION_FEATURE_STATUS } from \"../../lib/constants/permission-feature.js\";\nimport { toID } from \"../../lib/utils/data.js\";\n\nimport styles from \"./matrix.module.scss\";\n\nconst RBAC_PREFIX = \"rbac\";\n\ntype ApiListResponse<T> = {\n docs?: T[];\n};\n\nexport const RolePermissionMatrixClient = () => {\n const checkboxId = useId();\n const { config } = useConfig();\n const { hasSavePermission, id } = useDocumentInfo();\n const { setValue, value } = useField<Record<string, boolean> | null>({\n path: \"permissionMatrixDraft\",\n });\n const isReadOnly = !hasSavePermission;\n\n const [features, setFeatures] = useState<PermissionFeature[]>([]);\n const [actions, setActions] = useState<PermissionAction[]>([]);\n const [permissions, setPermissions] = useState<Permission[]>([]);\n const [rolePermissions, setRolePermissions] = useState<RolePermission[]>([]);\n const [loading, setLoading] = useState(true);\n const { t } = useTranslation();\n const seededForRoleIdRef = useRef<string | null>(null);\n\n useEffect(() => {\n const run = async () => {\n setLoading(true);\n try {\n const base = config?.routes?.api || \"/api\";\n\n const [featuresRes, actionsRes, permissionsRes, rolePermissionsRes] =\n await Promise.all([\n fetch(\n `${base}/permission-features?limit=0&depth=0&where[status][equals]=${PERMISSION_FEATURE_STATUS.ACTIVE}`,\n { credentials: \"include\" },\n ),\n fetch(\n `${base}/permission-actions?limit=0&depth=0&where[status][equals]=${PERMISSION_ACTION_STATUS.ACTIVE}`,\n { credentials: \"include\" },\n ),\n fetch(\n `${base}/permissions?limit=0&depth=1&where[status][equals]=${PERMISSION_STATUS.ACTIVE}`,\n { credentials: \"include\" },\n ),\n id\n ? fetch(\n `${base}/roles-permissions?limit=0&depth=0&where[role][equals]=${id}`,\n {\n credentials: \"include\",\n },\n )\n : Promise.resolve(new Response(JSON.stringify({ docs: [] }))),\n ]);\n\n const featuresJson =\n (await featuresRes.json()) as ApiListResponse<PermissionFeature>;\n const actionsJson =\n (await actionsRes.json()) as ApiListResponse<PermissionAction>;\n const permissionsJson =\n (await permissionsRes.json()) as ApiListResponse<Permission>;\n const rolePermissionsJson =\n (await rolePermissionsRes.json()) as ApiListResponse<RolePermission>;\n\n setFeatures(\n featuresJson.docs?.sort(\n (a, b) => (a?.sortOrder ?? 0) - (b?.sortOrder ?? 0),\n ) || [],\n );\n setActions(\n actionsJson.docs?.sort(\n (a, b) => (a?.sortOrder ?? 0) - (b?.sortOrder ?? 0),\n ) || [],\n );\n setPermissions(permissionsJson.docs || []);\n setRolePermissions(rolePermissionsJson.docs || []);\n } finally {\n setLoading(false);\n }\n };\n\n void run();\n }, [config?.routes?.api, id]);\n\n const enabledByPermissionID = useMemo(() => {\n const map = new Map<string, boolean>();\n for (const row of rolePermissions) {\n map.set(toID(row.permission), Boolean(row.enabled));\n }\n return map;\n }, [rolePermissions]);\n\n const draftValue = (\n value && typeof value === \"object\" && !Array.isArray(value) ? value : {}\n ) as Record<string, boolean>;\n\n useEffect(() => {\n if (!id || loading) {\n return;\n }\n\n const roleId = String(id);\n if (seededForRoleIdRef.current === roleId) {\n return;\n }\n\n const fromRolesPermissions: Record<string, boolean> = {};\n for (const [permissionID, enabled] of enabledByPermissionID.entries()) {\n if (permissionID) {\n fromRolesPermissions[permissionID] = enabled;\n }\n }\n\n const fromDocument =\n value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, boolean>)\n : {};\n\n const hasRolesPermissions = Object.keys(fromRolesPermissions).length > 0;\n const hasDocumentDraft = Object.keys(fromDocument).length > 0;\n\n if (!hasRolesPermissions && !hasDocumentDraft) {\n return;\n }\n\n seededForRoleIdRef.current = roleId;\n setValue({\n ...fromRolesPermissions,\n ...fromDocument,\n });\n }, [enabledByPermissionID, id, loading, setValue, value]);\n\n if (!id) {\n return (\n <div className={styles[`${RBAC_PREFIX}-component-placeholder`]}>\n {t(\n `components:rolePermissionMatrix:viewInUpdateScreenOnly:label` as Parameters<\n typeof t\n >[0],\n )}\n </div>\n );\n }\n\n if (loading) {\n return (\n <div className={styles[`${RBAC_PREFIX}-component-placeholder`]}>\n {t(\n `components:rolePermissionMatrix:loading:placeholder` as Parameters<\n typeof t\n >[0],\n )}\n </div>\n );\n }\n\n return (\n <div>\n <div className={styles[`${RBAC_PREFIX}-component-title`]}>\n {t(`components:rolePermissionMatrix:title` as Parameters<typeof t>[0])}\n </div>\n\n <div className={styles[`${RBAC_PREFIX}-table-container`]}>\n <table className={styles[`${RBAC_PREFIX}-table`]}>\n <thead>\n <tr>\n <th className={styles[`${RBAC_PREFIX}-table-th-feature`]}>\n {t(\n `components:rolePermissionMatrix:features:label` as Parameters<\n typeof t\n >[0],\n )}\n </th>\n <th\n className={styles[`${RBAC_PREFIX}-table-th-action`]}\n colSpan={\n actions.filter((action) => action.type === TYPE.MAIN).length\n }\n >\n {t(\n `components:rolePermissionMatrix:actions:label` as Parameters<\n typeof t\n >[0],\n )}\n </th>\n </tr>\n </thead>\n <tbody>\n {features.map((feature) => {\n const mainActions = actions.filter(\n (action) => action.type === TYPE.MAIN,\n );\n const subActions = actions.filter(\n (action) =>\n action.type === TYPE.SUB &&\n permissions.some(\n (permission) =>\n toID(permission.permissionAction) === String(action.id) &&\n toID(permission.permissionFeature) === String(feature.id),\n ),\n );\n const isSubActionInPermission = subActions.length > 0;\n\n return (\n <Fragment key={String(feature.id)}>\n <tr>\n <td className={styles[`${RBAC_PREFIX}-table-td-feature`]}>\n {t(\n `components:rolePermissionMatrix:features:${feature.code}` as Parameters<\n typeof t\n >[0],\n ) || feature.id}\n </td>\n\n {mainActions.map((action) => {\n const matchedPermission = permissions.find(\n (permission) =>\n toID(permission.permissionFeature) ===\n String(feature.id) &&\n toID(permission.permissionAction) ===\n String(action.id),\n );\n\n if (!matchedPermission) {\n return (\n <td\n key={`${feature.id}-${action.id}`}\n className={styles[`${RBAC_PREFIX}-table-td-action`]}\n >\n -\n </td>\n );\n }\n\n const permissionID = String(matchedPermission.id);\n const checked =\n typeof draftValue[permissionID] === \"boolean\"\n ? draftValue[permissionID]\n : (enabledByPermissionID.get(permissionID) ?? false);\n\n return (\n <td\n key={`${feature.id}-${action.id}`}\n className={styles[`${RBAC_PREFIX}-table-td-action`]}\n >\n <div\n className={\n styles[`${RBAC_PREFIX}-table-td-action-container`]\n }\n >\n <input\n type=\"checkbox\"\n id={`permission-matrix-checkbox-${checkboxId}-${feature.id}-${action.id}`}\n name={`permission-matrix-checkbox-${checkboxId}-${feature.id}-${action.id}`}\n checked={checked}\n disabled={isReadOnly}\n onChange={(event) => {\n setValue({\n ...draftValue,\n [permissionID]: event.target.checked,\n });\n }}\n className={\n styles[`${RBAC_PREFIX}-table-td-action-input`]\n }\n />\n <label\n htmlFor={`permission-matrix-checkbox-${checkboxId}-${feature.id}-${action.id}`}\n className={\n styles[`${RBAC_PREFIX}-table-td-action-label`]\n }\n >\n {t(\n `components:rolePermissionMatrix:actions:${action.code}` as Parameters<\n typeof t\n >[0],\n ) || action.id}\n </label>\n </div>\n </td>\n );\n })}\n </tr>\n\n {isSubActionInPermission && (\n <tr>\n <td\n className={styles[`${RBAC_PREFIX}-table-td-feature`]}\n ></td>\n <td\n className={styles[`${RBAC_PREFIX}-table-td-action`]}\n colSpan={mainActions.length}\n >\n {subActions.map((action) => {\n const matchedPermission = permissions.find(\n (permission) =>\n toID(permission.permissionFeature) ===\n String(feature.id) &&\n toID(permission.permissionAction) ===\n String(action.id),\n );\n\n if (!matchedPermission) {\n return null;\n }\n\n const permissionID = String(matchedPermission.id);\n const checked =\n typeof draftValue[permissionID] === \"boolean\"\n ? draftValue[permissionID]\n : (enabledByPermissionID.get(permissionID) ??\n false);\n\n return (\n <div key={`${feature.id}-${action.id}-sub`}>\n <input\n type=\"checkbox\"\n checked={checked}\n disabled={isReadOnly}\n onChange={(event) => {\n setValue({\n ...draftValue,\n [permissionID]: event.target.checked,\n });\n }}\n />{\" \"}\n <span\n style={{\n display: \"inline-block\",\n }}\n >\n {action.code || action.id}\n </span>\n </div>\n );\n })}\n </td>\n </tr>\n )}\n </Fragment>\n );\n })}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n"],"names":["useConfig","useDocumentInfo","useField","useTranslation","Fragment","useEffect","useId","useMemo","useRef","useState","STATUS","PERMISSION_STATUS","PERMISSION_ACTION_STATUS","TYPE","PERMISSION_FEATURE_STATUS","toID","styles","RBAC_PREFIX","RolePermissionMatrixClient","checkboxId","config","hasSavePermission","id","setValue","value","path","isReadOnly","features","setFeatures","actions","setActions","permissions","setPermissions","rolePermissions","setRolePermissions","loading","setLoading","t","seededForRoleIdRef","run","base","routes","api","featuresRes","actionsRes","permissionsRes","rolePermissionsRes","Promise","all","fetch","ACTIVE","credentials","resolve","Response","JSON","stringify","docs","featuresJson","json","actionsJson","permissionsJson","rolePermissionsJson","sort","a","b","sortOrder","enabledByPermissionID","map","Map","row","set","permission","Boolean","enabled","draftValue","Array","isArray","roleId","String","current","fromRolesPermissions","permissionID","entries","fromDocument","hasRolesPermissions","Object","keys","length","hasDocumentDraft","div","className","table","thead","tr","th","colSpan","filter","action","type","MAIN","tbody","feature","mainActions","subActions","SUB","some","permissionAction","permissionFeature","isSubActionInPermission","td","code","matchedPermission","find","checked","get","input","name","disabled","onChange","event","target","label","htmlFor","span","style","display"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/role-permission-matrix-client/index.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useConfig,\n useDocumentInfo,\n useField,\n useTranslation,\n} from \"@payloadcms/ui\";\nimport { Fragment, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport type { PermissionAction } from \"../../collections/permission-actions/types.js\";\nimport type { PermissionFeature } from \"../../collections/permission-features/types.js\";\nimport type { Permission } from \"../../collections/permissions/types.js\";\nimport type { RolePermission } from \"../../collections/roles-permissions/types.js\";\nimport { STATUS as PERMISSION_STATUS } from \"../../lib/constants/permission.js\";\nimport {\n STATUS as PERMISSION_ACTION_STATUS,\n TYPE,\n} from \"../../lib/constants/permission-action.js\";\nimport { STATUS as PERMISSION_FEATURE_STATUS } from \"../../lib/constants/permission-feature.js\";\nimport { toID } from \"../../lib/utils/data.js\";\n\nimport styles from \"./matrix.module.scss\";\n\nconst RBAC_PREFIX = \"rbac\";\n\ntype ApiListResponse<T> = {\n docs?: T[];\n};\n\nexport const RolePermissionMatrixClient = () => {\n const checkboxId = useId();\n const { config } = useConfig();\n const { hasSavePermission, id } = useDocumentInfo();\n const { setValue, value } = useField<Record<string, boolean> | null>({\n path: \"permissionMatrixDraft\",\n });\n const isReadOnly = !hasSavePermission;\n\n const [features, setFeatures] = useState<PermissionFeature[]>([]);\n const [actions, setActions] = useState<PermissionAction[]>([]);\n const [permissions, setPermissions] = useState<Permission[]>([]);\n const [rolePermissions, setRolePermissions] = useState<RolePermission[]>([]);\n const [loading, setLoading] = useState(true);\n const { t } = useTranslation();\n const seededForRoleIdRef = useRef<string | null>(null);\n\n useEffect(() => {\n const run = async () => {\n setLoading(true);\n try {\n const base = config?.routes?.api || \"/api\";\n\n const [featuresRes, actionsRes, permissionsRes, rolePermissionsRes] =\n await Promise.all([\n fetch(\n `${base}/permission-features?limit=0&depth=0&where[status][equals]=${PERMISSION_FEATURE_STATUS.ACTIVE}`,\n { credentials: \"include\" },\n ),\n fetch(\n `${base}/permission-actions?limit=0&depth=0&where[status][equals]=${PERMISSION_ACTION_STATUS.ACTIVE}`,\n { credentials: \"include\" },\n ),\n fetch(\n `${base}/permissions?limit=0&depth=1&where[status][equals]=${PERMISSION_STATUS.ACTIVE}`,\n { credentials: \"include\" },\n ),\n id\n ? fetch(\n `${base}/roles-permissions?limit=0&depth=0&where[role][equals]=${id}`,\n {\n credentials: \"include\",\n },\n )\n : Promise.resolve(new Response(JSON.stringify({ docs: [] }))),\n ]);\n\n const featuresJson =\n (await featuresRes.json()) as ApiListResponse<PermissionFeature>;\n const actionsJson =\n (await actionsRes.json()) as ApiListResponse<PermissionAction>;\n const permissionsJson =\n (await permissionsRes.json()) as ApiListResponse<Permission>;\n const rolePermissionsJson =\n (await rolePermissionsRes.json()) as ApiListResponse<RolePermission>;\n\n setFeatures(\n featuresJson.docs?.sort(\n (a, b) => (a?.sortOrder ?? 0) - (b?.sortOrder ?? 0),\n ) || [],\n );\n setActions(\n actionsJson.docs?.sort(\n (a, b) => (a?.sortOrder ?? 0) - (b?.sortOrder ?? 0),\n ) || [],\n );\n setPermissions(permissionsJson.docs || []);\n setRolePermissions(rolePermissionsJson.docs || []);\n } finally {\n setLoading(false);\n }\n };\n\n void run();\n }, [config?.routes?.api, id]);\n\n const enabledByPermissionID = useMemo(() => {\n const map = new Map<string, boolean>();\n for (const row of rolePermissions) {\n map.set(toID(row.permission), Boolean(row.enabled));\n }\n return map;\n }, [rolePermissions]);\n\n const draftValue = (\n value && typeof value === \"object\" && !Array.isArray(value) ? value : {}\n ) as Record<string, boolean>;\n\n useEffect(() => {\n if (!id || loading) {\n return;\n }\n\n const roleId = String(id);\n if (seededForRoleIdRef.current === roleId) {\n return;\n }\n\n const fromRolesPermissions: Record<string, boolean> = {};\n for (const [permissionID, enabled] of enabledByPermissionID.entries()) {\n if (permissionID) {\n fromRolesPermissions[permissionID] = enabled;\n }\n }\n\n const fromDocument =\n value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, boolean>)\n : {};\n\n const hasRolesPermissions = Object.keys(fromRolesPermissions).length > 0;\n const hasDocumentDraft = Object.keys(fromDocument).length > 0;\n\n if (!hasRolesPermissions && !hasDocumentDraft) {\n return;\n }\n\n seededForRoleIdRef.current = roleId;\n setValue({\n ...fromRolesPermissions,\n ...fromDocument,\n });\n }, [enabledByPermissionID, id, loading, setValue, value]);\n\n if (!id) {\n return (\n <div className={styles[`${RBAC_PREFIX}-component-placeholder`]}>\n {t(\n `components:rolePermissionMatrix:viewInUpdateScreenOnly:label` as Parameters<\n typeof t\n >[0],\n )}\n </div>\n );\n }\n\n if (loading) {\n return (\n <div className={styles[`${RBAC_PREFIX}-component-placeholder`]}>\n {t(\n `components:rolePermissionMatrix:loading:placeholder` as Parameters<\n typeof t\n >[0],\n )}\n </div>\n );\n }\n\n return (\n <div>\n <div className={styles[`${RBAC_PREFIX}-component-title`]}>\n {t(`components:rolePermissionMatrix:title` as Parameters<typeof t>[0])}\n </div>\n\n <div className={styles[`${RBAC_PREFIX}-table-container`]}>\n <table className={styles[`${RBAC_PREFIX}-table`]}>\n <thead>\n <tr>\n <th className={styles[`${RBAC_PREFIX}-table-th-feature`]}>\n {t(\n `components:rolePermissionMatrix:featuresLabel` as Parameters<\n typeof t\n >[0],\n )}\n </th>\n <th\n className={styles[`${RBAC_PREFIX}-table-th-action`]}\n colSpan={\n actions.filter((action) => action.type === TYPE.MAIN).length\n }\n >\n {t(\n `components:rolePermissionMatrix:actionsLabel` as Parameters<\n typeof t\n >[0],\n )}\n </th>\n </tr>\n </thead>\n <tbody>\n {features.map((feature) => {\n const mainActions = actions.filter(\n (action) => action.type === TYPE.MAIN,\n );\n const subActions = actions.filter(\n (action) =>\n action.type === TYPE.SUB &&\n permissions.some(\n (permission) =>\n toID(permission.permissionAction) === String(action.id) &&\n toID(permission.permissionFeature) === String(feature.id),\n ),\n );\n const isSubActionInPermission = subActions.length > 0;\n\n return (\n <Fragment key={String(feature.id)}>\n <tr>\n <td className={styles[`${RBAC_PREFIX}-table-td-feature`]}>\n {t(\n `components:rolePermissionMatrix:features:${feature.code}` as Parameters<\n typeof t\n >[0],\n ) || feature.id}\n </td>\n\n {mainActions.map((action) => {\n const matchedPermission = permissions.find(\n (permission) =>\n toID(permission.permissionFeature) ===\n String(feature.id) &&\n toID(permission.permissionAction) ===\n String(action.id),\n );\n\n if (!matchedPermission) {\n return (\n <td\n key={`${feature.id}-${action.id}`}\n className={styles[`${RBAC_PREFIX}-table-td-action`]}\n >\n -\n </td>\n );\n }\n\n const permissionID = String(matchedPermission.id);\n const checked =\n typeof draftValue[permissionID] === \"boolean\"\n ? draftValue[permissionID]\n : (enabledByPermissionID.get(permissionID) ?? false);\n\n return (\n <td\n key={`${feature.id}-${action.id}`}\n className={styles[`${RBAC_PREFIX}-table-td-action`]}\n >\n <div\n className={\n styles[`${RBAC_PREFIX}-table-td-action-container`]\n }\n >\n <input\n type=\"checkbox\"\n id={`permission-matrix-checkbox-${checkboxId}-${feature.id}-${action.id}`}\n name={`permission-matrix-checkbox-${checkboxId}-${feature.id}-${action.id}`}\n checked={checked}\n disabled={isReadOnly}\n onChange={(event) => {\n setValue({\n ...draftValue,\n [permissionID]: event.target.checked,\n });\n }}\n className={\n styles[`${RBAC_PREFIX}-table-td-action-input`]\n }\n />\n <label\n htmlFor={`permission-matrix-checkbox-${checkboxId}-${feature.id}-${action.id}`}\n className={\n styles[`${RBAC_PREFIX}-table-td-action-label`]\n }\n >\n {t(\n `components:rolePermissionMatrix:actions:${action.code}` as Parameters<\n typeof t\n >[0],\n ) || action.id}\n </label>\n </div>\n </td>\n );\n })}\n </tr>\n\n {isSubActionInPermission && (\n <tr>\n <td\n className={styles[`${RBAC_PREFIX}-table-td-feature`]}\n ></td>\n <td\n className={styles[`${RBAC_PREFIX}-table-td-action`]}\n colSpan={mainActions.length}\n >\n {subActions.map((action) => {\n const matchedPermission = permissions.find(\n (permission) =>\n toID(permission.permissionFeature) ===\n String(feature.id) &&\n toID(permission.permissionAction) ===\n String(action.id),\n );\n\n if (!matchedPermission) {\n return null;\n }\n\n const permissionID = String(matchedPermission.id);\n const checked =\n typeof draftValue[permissionID] === \"boolean\"\n ? draftValue[permissionID]\n : (enabledByPermissionID.get(permissionID) ??\n false);\n\n return (\n <div key={`${feature.id}-${action.id}-sub`}>\n <input\n type=\"checkbox\"\n checked={checked}\n disabled={isReadOnly}\n onChange={(event) => {\n setValue({\n ...draftValue,\n [permissionID]: event.target.checked,\n });\n }}\n />{\" \"}\n <span\n style={{\n display: \"inline-block\",\n }}\n >\n {action.code || action.id}\n </span>\n </div>\n );\n })}\n </td>\n </tr>\n )}\n </Fragment>\n );\n })}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n"],"names":["useConfig","useDocumentInfo","useField","useTranslation","Fragment","useEffect","useId","useMemo","useRef","useState","STATUS","PERMISSION_STATUS","PERMISSION_ACTION_STATUS","TYPE","PERMISSION_FEATURE_STATUS","toID","styles","RBAC_PREFIX","RolePermissionMatrixClient","checkboxId","config","hasSavePermission","id","setValue","value","path","isReadOnly","features","setFeatures","actions","setActions","permissions","setPermissions","rolePermissions","setRolePermissions","loading","setLoading","t","seededForRoleIdRef","run","base","routes","api","featuresRes","actionsRes","permissionsRes","rolePermissionsRes","Promise","all","fetch","ACTIVE","credentials","resolve","Response","JSON","stringify","docs","featuresJson","json","actionsJson","permissionsJson","rolePermissionsJson","sort","a","b","sortOrder","enabledByPermissionID","map","Map","row","set","permission","Boolean","enabled","draftValue","Array","isArray","roleId","String","current","fromRolesPermissions","permissionID","entries","fromDocument","hasRolesPermissions","Object","keys","length","hasDocumentDraft","div","className","table","thead","tr","th","colSpan","filter","action","type","MAIN","tbody","feature","mainActions","subActions","SUB","some","permissionAction","permissionFeature","isSubActionInPermission","td","code","matchedPermission","find","checked","get","input","name","disabled","onChange","event","target","label","htmlFor","span","style","display"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Import Payload compile-time SCSS vars ($breakpoint-s-width, etc.).
|
|
2
2
|
// Note: @payloadcms/ui/scss/vars is not a published export — use dist/scss/vars.
|
|
3
|
-
@use "../../../node_modules/@payloadcms/ui/dist/scss/vars" as payload-vars;
|
|
3
|
+
// @use "../../../node_modules/@payloadcms/ui/dist/scss/vars" as payload-vars;
|
|
4
4
|
@use "../../styles/variables" as rbac-vars;
|
|
5
5
|
|
|
6
6
|
$local-prefix: rbac-vars.$rbac-prefix;
|
|
@@ -26,9 +26,6 @@ $local-prefix: rbac-vars.$rbac-prefix;
|
|
|
26
26
|
&-container {
|
|
27
27
|
border-radius: var(--style-radius-m);
|
|
28
28
|
border: 1px solid var(--theme-border-color);
|
|
29
|
-
@media only screen and (min-width: payload-vars.$breakpoint-s-width) {
|
|
30
|
-
border-radius: var(--style-radius-l);
|
|
31
|
-
}
|
|
32
29
|
}
|
|
33
30
|
&-th {
|
|
34
31
|
&-feature {
|
|
@@ -8,11 +8,9 @@ export type RolePermissionMatrixClientTranslations = {
|
|
|
8
8
|
placeholder?: string;
|
|
9
9
|
};
|
|
10
10
|
title?: string;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
actions?:
|
|
15
|
-
label?: string;
|
|
16
|
-
} | Record<string, string>;
|
|
11
|
+
featuresLabel?: string;
|
|
12
|
+
features?: Record<string, string>;
|
|
13
|
+
actionsLabel?: string;
|
|
14
|
+
actions?: Record<string, string>;
|
|
17
15
|
};
|
|
18
16
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/role-permission-matrix-client/types.ts"],"sourcesContent":["export type RolePermissionMatrixClientTranslations = {\n [locale: string]: {\n viewInUpdateScreenOnly?: {\n label?: string
|
|
1
|
+
{"version":3,"sources":["../../../src/components/role-permission-matrix-client/types.ts"],"sourcesContent":["export type RolePermissionMatrixClientTranslations = {\n [locale: string]: {\n viewInUpdateScreenOnly?: {\n label?: string;\n placeholder?: string;\n };\n loading?: {\n placeholder?: string;\n };\n title?: string;\n featuresLabel?: string;\n features?: Record<string, string>;\n actionsLabel?: string;\n actions?: Record<string, string>;\n };\n};\n"],"names":[],"mappings":"AAAA,WAeE"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ import type { Config } from "payload";
|
|
|
2
2
|
import type { PayloadAuthRbacPluginConfig } from "./types.js";
|
|
3
3
|
export * from "./lib/constants/index.js";
|
|
4
4
|
export * from "./lib/utils/index.js";
|
|
5
|
+
export type * from "./types.js";
|
|
5
6
|
export declare const payloadAuthRbacPlugin: (pluginOptions: PayloadAuthRbacPluginConfig) => (config: Config) => Config;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { Config } from \"payload\";\nimport { permissionActionsDefaultTranslations } from \"./collections/permission-actions/default-data.js\";\nimport { getPermissionActionsCollection } from \"./collections/permission-actions/index.js\";\nimport { permissionFeaturesDefaultTranslations } from \"./collections/permission-features/default-data.js\";\nimport { getPermissionFeaturesCollection } from \"./collections/permission-features/index.js\";\nimport { permissionsDefaultTranslations } from \"./collections/permissions/default-data.js\";\nimport { getPermissionsCollection } from \"./collections/permissions/index.js\";\nimport { rolesDefaultTranslations } from \"./collections/roles/default-data.js\";\nimport { getRolesCollection } from \"./collections/roles/index.js\";\nimport { rolesPermissionsDefaultTranslations } from \"./collections/roles-permissions/default-data.js\";\nimport { getRolesPermissionsCollection } from \"./collections/roles-permissions/index.js\";\nimport { usersDefaultTranslations } from \"./collections/users/default-data.js\";\nimport { modifyUsersCollection } from \"./collections/users/index.js\";\nimport { rolePermissionMatrixClientDefaultTranslations } from \"./components/role-permission-matrix-client/default-data.js\";\n\nimport {\n getAllTranslationsOfSpecificObject,\n getMergedTranslations,\n} from \"./lib/utils/index.js\";\nimport type {\n PayloadAuthRbacPluginConfig,\n PermissionActionsCollectionTranslations,\n PermissionFeaturesCollectionTranslations,\n PermissionsCollectionTranslations,\n RolesCollectionTranslations,\n RolesPermissionsCollectionTranslations,\n UsersModificationTranslations,\n} from \"./types.js\";\n\nexport * from \"./lib/constants/index.js\";\nexport * from \"./lib/utils/index.js\";\n\nexport const payloadAuthRbacPlugin =\n (pluginOptions: PayloadAuthRbacPluginConfig) =>\n (config: Config): Config => {\n if (!config.collections) {\n config.collections = [];\n }\n\n if (!pluginOptions.translations) {\n pluginOptions.translations = {};\n }\n\n config.collections.push(\n getPermissionActionsCollection({\n ...pluginOptions.collections?.permissionActions,\n translations: getMergedTranslations({\n defaultTranslations: permissionActionsDefaultTranslations,\n translations:\n getAllTranslationsOfSpecificObject<PermissionActionsCollectionTranslations>(\n {\n translations: pluginOptions.translations,\n path: \"collections.permissionActions\",\n },\n ),\n }),\n }),\n );\n config.collections.push(\n getPermissionFeaturesCollection({\n ...pluginOptions.collections?.permissionFeatures,\n translations: getMergedTranslations({\n defaultTranslations: permissionFeaturesDefaultTranslations,\n translations:\n getAllTranslationsOfSpecificObject<PermissionFeaturesCollectionTranslations>(\n {\n translations: pluginOptions.translations,\n path: \"collections.permissionFeatures\",\n },\n ),\n }),\n }),\n );\n config.collections.push(\n getPermissionsCollection({\n ...pluginOptions.collections?.permissions,\n translations: getMergedTranslations({\n defaultTranslations: permissionsDefaultTranslations,\n translations:\n getAllTranslationsOfSpecificObject<PermissionsCollectionTranslations>(\n {\n translations: pluginOptions.translations,\n path: \"collections.permissions\",\n },\n ),\n }),\n }),\n );\n config.collections.push(\n getRolesCollection({\n ...pluginOptions.collections?.roles,\n translations: getMergedTranslations({\n defaultTranslations: rolesDefaultTranslations,\n translations:\n getAllTranslationsOfSpecificObject<RolesCollectionTranslations>({\n translations: pluginOptions.translations,\n path: \"collections.roles\",\n }),\n }),\n }),\n );\n config.collections.push(\n getRolesPermissionsCollection({\n ...pluginOptions.collections?.rolesPermissions,\n translations: getMergedTranslations({\n defaultTranslations: rolesPermissionsDefaultTranslations,\n translations:\n getAllTranslationsOfSpecificObject<RolesPermissionsCollectionTranslations>(\n {\n translations: pluginOptions.translations,\n path: \"collections.rolesPermissions\",\n },\n ),\n }),\n }),\n );\n\n if (pluginOptions.autoModifyUsersCollection !== false) {\n config = modifyUsersCollection({\n translations: getMergedTranslations({\n defaultTranslations: usersDefaultTranslations,\n translations:\n getAllTranslationsOfSpecificObject<UsersModificationTranslations>({\n translations: pluginOptions.translations,\n path: \"collections.users\",\n }),\n }),\n })(config);\n }\n // if (pluginOptions.collections) {\n // for (const collectionSlug in pluginOptions.collections) {\n // const collection = config.collections.find(\n // (collection) => collection.slug === collectionSlug,\n // );\n\n // if (collection) {\n // collection.fields.push({\n // name: \"addedByPlugin\",\n // type: \"text\",\n // admin: {\n // position: \"sidebar\",\n // },\n // });\n // }\n // }\n // }\n\n /**\n * If the plugin is disabled, we still want to keep added collections/fields so the database schema is consistent which is important for migrations.\n * If your plugin heavily modifies the database schema, you may want to remove this property.\n */\n if (pluginOptions.disabled) {\n return config;\n }\n\n if (!config.endpoints) {\n config.endpoints = [];\n }\n\n if (!config.admin) {\n config.admin = {};\n }\n\n if (!config.admin.components) {\n config.admin.components = {};\n }\n\n // if (!config.admin.components.beforeDashboard) {\n // config.admin.components.beforeDashboard = []\n // }\n\n // config.admin.components.beforeDashboard.push(\n // `payload-auth-rbac-plugin/rsc#BeforeDashboardServer`,\n // )\n\n // config.endpoints.push({\n // handler: customEndpointHandler,\n // method: \"get\",\n // path: \"/my-plugin-endpoint\",\n // })\n\n const incomingOnInit = config.onInit;\n\n config.onInit = async (payload) => {\n // Ensure we are executing any existing onInit functions before running our own.\n if (incomingOnInit) {\n await incomingOnInit(payload);\n }\n\n // const { totalDocs } = await payload.count({\n // collection: \"plugin-collection\",\n // where: {\n // id: {\n // equals: \"seeded-by-plugin\",\n // },\n // },\n // });\n\n // if (totalDocs === 0) {\n // await payload.create({\n // collection: \"plugin-collection\",\n // data: {\n // id: \"seeded-by-plugin\",\n // },\n // });\n // }\n };\n\n if (!config.i18n) {\n config.i18n = {};\n }\n const existingTranslations =\n (config.i18n?.translations as\n | Record<string, Record<string, unknown>>\n | undefined) || {};\n\n const defaultRBACTranslations = {\n en: {\n collections: {\n permissionActions: permissionActionsDefaultTranslations.en,\n permissionFeatures: permissionFeaturesDefaultTranslations.en,\n permissions: permissionsDefaultTranslations.en,\n roles: rolesDefaultTranslations.en,\n rolesPermissions: rolesPermissionsDefaultTranslations.en,\n users: usersDefaultTranslations.en,\n },\n components: {\n rolePermissionMatrix:\n rolePermissionMatrixClientDefaultTranslations.en,\n },\n },\n };\n\n const mergedRBACTranslations = getMergedTranslations({\n defaultTranslations: defaultRBACTranslations,\n translations: pluginOptions.translations,\n });\n\n const finalTranslations = getMergedTranslations({\n defaultTranslations: existingTranslations as Record<string, any>,\n translations: mergedRBACTranslations,\n });\n\n config.i18n = {\n ...config.i18n,\n translations: finalTranslations,\n };\n return config;\n };\n"],"names":["permissionActionsDefaultTranslations","getPermissionActionsCollection","permissionFeaturesDefaultTranslations","getPermissionFeaturesCollection","permissionsDefaultTranslations","getPermissionsCollection","rolesDefaultTranslations","getRolesCollection","rolesPermissionsDefaultTranslations","getRolesPermissionsCollection","usersDefaultTranslations","modifyUsersCollection","rolePermissionMatrixClientDefaultTranslations","getAllTranslationsOfSpecificObject","getMergedTranslations","payloadAuthRbacPlugin","pluginOptions","config","collections","translations","push","permissionActions","defaultTranslations","path","permissionFeatures","permissions","roles","rolesPermissions","autoModifyUsersCollection","disabled","endpoints","admin","components","incomingOnInit","onInit","payload","i18n","existingTranslations","defaultRBACTranslations","en","users","rolePermissionMatrix","mergedRBACTranslations","finalTranslations"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { Config } from \"payload\";\nimport { permissionActionsDefaultTranslations } from \"./collections/permission-actions/default-data.js\";\nimport { getPermissionActionsCollection } from \"./collections/permission-actions/index.js\";\nimport { permissionFeaturesDefaultTranslations } from \"./collections/permission-features/default-data.js\";\nimport { getPermissionFeaturesCollection } from \"./collections/permission-features/index.js\";\nimport { permissionsDefaultTranslations } from \"./collections/permissions/default-data.js\";\nimport { getPermissionsCollection } from \"./collections/permissions/index.js\";\nimport { rolesDefaultTranslations } from \"./collections/roles/default-data.js\";\nimport { getRolesCollection } from \"./collections/roles/index.js\";\nimport { rolesPermissionsDefaultTranslations } from \"./collections/roles-permissions/default-data.js\";\nimport { getRolesPermissionsCollection } from \"./collections/roles-permissions/index.js\";\nimport { usersDefaultTranslations } from \"./collections/users/default-data.js\";\nimport { modifyUsersCollection } from \"./collections/users/index.js\";\nimport { rolePermissionMatrixClientDefaultTranslations } from \"./components/role-permission-matrix-client/default-data.js\";\n\nimport {\n getAllTranslationsOfSpecificObject,\n getMergedTranslations,\n} from \"./lib/utils/index.js\";\nimport type {\n PayloadAuthRbacPluginConfig,\n PermissionActionsCollectionTranslations,\n PermissionFeaturesCollectionTranslations,\n PermissionsCollectionTranslations,\n RolesCollectionTranslations,\n RolesPermissionsCollectionTranslations,\n UsersModificationTranslations,\n} from \"./types.js\";\n\nexport * from \"./lib/constants/index.js\";\nexport * from \"./lib/utils/index.js\";\nexport type * from \"./types.js\";\n\nexport const payloadAuthRbacPlugin =\n (pluginOptions: PayloadAuthRbacPluginConfig) =>\n (config: Config): Config => {\n if (!config.collections) {\n config.collections = [];\n }\n\n if (!pluginOptions.translations) {\n pluginOptions.translations = {};\n }\n\n config.collections.push(\n getPermissionActionsCollection({\n ...pluginOptions.collections?.permissionActions,\n translations: getMergedTranslations({\n defaultTranslations: permissionActionsDefaultTranslations,\n translations:\n getAllTranslationsOfSpecificObject<PermissionActionsCollectionTranslations>(\n {\n translations: pluginOptions.translations,\n path: \"collections.permissionActions\",\n },\n ),\n }),\n }),\n );\n config.collections.push(\n getPermissionFeaturesCollection({\n ...pluginOptions.collections?.permissionFeatures,\n translations: getMergedTranslations({\n defaultTranslations: permissionFeaturesDefaultTranslations,\n translations:\n getAllTranslationsOfSpecificObject<PermissionFeaturesCollectionTranslations>(\n {\n translations: pluginOptions.translations,\n path: \"collections.permissionFeatures\",\n },\n ),\n }),\n }),\n );\n config.collections.push(\n getPermissionsCollection({\n ...pluginOptions.collections?.permissions,\n translations: getMergedTranslations({\n defaultTranslations: permissionsDefaultTranslations,\n translations:\n getAllTranslationsOfSpecificObject<PermissionsCollectionTranslations>(\n {\n translations: pluginOptions.translations,\n path: \"collections.permissions\",\n },\n ),\n }),\n }),\n );\n config.collections.push(\n getRolesCollection({\n ...pluginOptions.collections?.roles,\n translations: getMergedTranslations({\n defaultTranslations: rolesDefaultTranslations,\n translations:\n getAllTranslationsOfSpecificObject<RolesCollectionTranslations>({\n translations: pluginOptions.translations,\n path: \"collections.roles\",\n }),\n }),\n }),\n );\n config.collections.push(\n getRolesPermissionsCollection({\n ...pluginOptions.collections?.rolesPermissions,\n translations: getMergedTranslations({\n defaultTranslations: rolesPermissionsDefaultTranslations,\n translations:\n getAllTranslationsOfSpecificObject<RolesPermissionsCollectionTranslations>(\n {\n translations: pluginOptions.translations,\n path: \"collections.rolesPermissions\",\n },\n ),\n }),\n }),\n );\n\n if (pluginOptions.autoModifyUsersCollection !== false) {\n config = modifyUsersCollection({\n translations: getMergedTranslations({\n defaultTranslations: usersDefaultTranslations,\n translations:\n getAllTranslationsOfSpecificObject<UsersModificationTranslations>({\n translations: pluginOptions.translations,\n path: \"collections.users\",\n }),\n }),\n })(config);\n }\n // if (pluginOptions.collections) {\n // for (const collectionSlug in pluginOptions.collections) {\n // const collection = config.collections.find(\n // (collection) => collection.slug === collectionSlug,\n // );\n\n // if (collection) {\n // collection.fields.push({\n // name: \"addedByPlugin\",\n // type: \"text\",\n // admin: {\n // position: \"sidebar\",\n // },\n // });\n // }\n // }\n // }\n\n /**\n * If the plugin is disabled, we still want to keep added collections/fields so the database schema is consistent which is important for migrations.\n * If your plugin heavily modifies the database schema, you may want to remove this property.\n */\n if (pluginOptions.disabled) {\n return config;\n }\n\n if (!config.endpoints) {\n config.endpoints = [];\n }\n\n if (!config.admin) {\n config.admin = {};\n }\n\n if (!config.admin.components) {\n config.admin.components = {};\n }\n\n // if (!config.admin.components.beforeDashboard) {\n // config.admin.components.beforeDashboard = []\n // }\n\n // config.admin.components.beforeDashboard.push(\n // `payload-auth-rbac-plugin/rsc#BeforeDashboardServer`,\n // )\n\n // config.endpoints.push({\n // handler: customEndpointHandler,\n // method: \"get\",\n // path: \"/my-plugin-endpoint\",\n // })\n\n const incomingOnInit = config.onInit;\n\n config.onInit = async (payload) => {\n // Ensure we are executing any existing onInit functions before running our own.\n if (incomingOnInit) {\n await incomingOnInit(payload);\n }\n\n // const { totalDocs } = await payload.count({\n // collection: \"plugin-collection\",\n // where: {\n // id: {\n // equals: \"seeded-by-plugin\",\n // },\n // },\n // });\n\n // if (totalDocs === 0) {\n // await payload.create({\n // collection: \"plugin-collection\",\n // data: {\n // id: \"seeded-by-plugin\",\n // },\n // });\n // }\n };\n\n if (!config.i18n) {\n config.i18n = {};\n }\n const existingTranslations =\n (config.i18n?.translations as\n | Record<string, Record<string, unknown>>\n | undefined) || {};\n\n const defaultRBACTranslations = {\n en: {\n collections: {\n permissionActions: permissionActionsDefaultTranslations.en,\n permissionFeatures: permissionFeaturesDefaultTranslations.en,\n permissions: permissionsDefaultTranslations.en,\n roles: rolesDefaultTranslations.en,\n rolesPermissions: rolesPermissionsDefaultTranslations.en,\n users: usersDefaultTranslations.en,\n },\n components: {\n rolePermissionMatrix:\n rolePermissionMatrixClientDefaultTranslations.en,\n },\n },\n };\n\n const mergedRBACTranslations = getMergedTranslations({\n defaultTranslations: defaultRBACTranslations,\n translations: pluginOptions.translations,\n });\n\n const finalTranslations = getMergedTranslations({\n defaultTranslations: existingTranslations as Record<string, any>,\n translations: mergedRBACTranslations,\n });\n\n config.i18n = {\n ...config.i18n,\n translations: finalTranslations,\n };\n return config;\n };\n"],"names":["permissionActionsDefaultTranslations","getPermissionActionsCollection","permissionFeaturesDefaultTranslations","getPermissionFeaturesCollection","permissionsDefaultTranslations","getPermissionsCollection","rolesDefaultTranslations","getRolesCollection","rolesPermissionsDefaultTranslations","getRolesPermissionsCollection","usersDefaultTranslations","modifyUsersCollection","rolePermissionMatrixClientDefaultTranslations","getAllTranslationsOfSpecificObject","getMergedTranslations","payloadAuthRbacPlugin","pluginOptions","config","collections","translations","push","permissionActions","defaultTranslations","path","permissionFeatures","permissions","roles","rolesPermissions","autoModifyUsersCollection","disabled","endpoints","admin","components","incomingOnInit","onInit","payload","i18n","existingTranslations","defaultRBACTranslations","en","users","rolePermissionMatrix","mergedRBACTranslations","finalTranslations"],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -12,6 +12,12 @@ export * from "./collections/roles/types.js";
|
|
|
12
12
|
export * from "./collections/roles-permissions/types.js";
|
|
13
13
|
export * from "./collections/users/types.js";
|
|
14
14
|
export * from "./components/role-permission-matrix-client/types.js";
|
|
15
|
+
export type ItemRef = number | string | {
|
|
16
|
+
id?: number | string;
|
|
17
|
+
};
|
|
18
|
+
export type ApiListResponse<T> = {
|
|
19
|
+
docs?: T[];
|
|
20
|
+
};
|
|
15
21
|
export type RBACTranslations = {
|
|
16
22
|
[locale: string]: {
|
|
17
23
|
collections?: {
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["// Collections types\nimport type * as PermissionActionTypes from \"./collections/permission-actions/types.js\";\nimport type * as PermissionFeatureTypes from \"./collections/permission-features/types.js\";\nimport type * as PermissionTypes from \"./collections/permissions/types.js\";\nimport type * as RoleTypes from \"./collections/roles/types.js\";\nimport type * as RolePermissionTypes from \"./collections/roles-permissions/types.js\";\nimport type * as UsersTypes from \"./collections/users/types.js\";\n\n// Components types\nimport type * as RolePermissionMatrixClientTypes from \"./components/role-permission-matrix-client/types.js\";\n\nexport * from \"./collections/permission-actions/types.js\";\nexport * from \"./collections/permission-features/types.js\";\nexport * from \"./collections/permissions/types.js\";\nexport * from \"./collections/roles/types.js\";\nexport * from \"./collections/roles-permissions/types.js\";\nexport * from \"./collections/users/types.js\";\nexport * from \"./components/role-permission-matrix-client/types.js\";\n\nexport type RBACTranslations = {\n [locale: string]: {\n // Collections types\n collections?: {\n permissionActions?: PermissionActionTypes.PermissionActionsCollectionTranslations[string];\n permissionFeatures?: PermissionFeatureTypes.PermissionFeaturesCollectionTranslations[string];\n permissions?: PermissionTypes.PermissionsCollectionTranslations[string];\n roles?: RoleTypes.RolesCollectionTranslations[string];\n rolesPermissions?: RolePermissionTypes.RolesPermissionsCollectionTranslations[string];\n users?: UsersTypes.UsersModificationTranslations[string];\n };\n // Components types\n components?: {\n rolePermissionMatrix?: RolePermissionMatrixClientTypes.RolePermissionMatrixClientTranslations[string];\n };\n };\n};\n\nexport type PayloadAuthRbacPluginConfig = {\n /**\n * Collection slugs to augment (may include plugin-only collections absent from generated `CollectionSlug`).\n */\n collections?: Partial<\n Record<\n string,\n | Omit<\n PermissionActionTypes.PermissionActionsCollectionParams,\n \"translations\"\n >\n | Omit<\n PermissionFeatureTypes.PermissionFeaturesCollectionParams,\n \"translations\"\n >\n | Omit<PermissionTypes.PermissionsCollectionParams, \"translations\">\n | Omit<RoleTypes.RolesCollectionParams, \"translations\">\n | Omit<\n RolePermissionTypes.RolesPermissionsCollectionParams,\n \"translations\"\n >\n >\n >;\n disabled?: boolean;\n translations?: RBACTranslations;\n autoModifyUsersCollection?: boolean;\n};\n"],"names":[],"mappings":"AAAA,oBAAoB;AAWpB,cAAc,4CAA4C;AAC1D,cAAc,6CAA6C;AAC3D,cAAc,qCAAqC;AACnD,cAAc,+BAA+B;AAC7C,cAAc,2CAA2C;AACzD,cAAc,+BAA+B;AAC7C,cAAc,sDAAsD"}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["// Collections types\nimport type * as PermissionActionTypes from \"./collections/permission-actions/types.js\";\nimport type * as PermissionFeatureTypes from \"./collections/permission-features/types.js\";\nimport type * as PermissionTypes from \"./collections/permissions/types.js\";\nimport type * as RoleTypes from \"./collections/roles/types.js\";\nimport type * as RolePermissionTypes from \"./collections/roles-permissions/types.js\";\nimport type * as UsersTypes from \"./collections/users/types.js\";\n\n// Components types\nimport type * as RolePermissionMatrixClientTypes from \"./components/role-permission-matrix-client/types.js\";\n\nexport * from \"./collections/permission-actions/types.js\";\nexport * from \"./collections/permission-features/types.js\";\nexport * from \"./collections/permissions/types.js\";\nexport * from \"./collections/roles/types.js\";\nexport * from \"./collections/roles-permissions/types.js\";\nexport * from \"./collections/users/types.js\";\nexport * from \"./components/role-permission-matrix-client/types.js\";\n\nexport type ItemRef = number | string | { id?: number | string };\n\nexport type ApiListResponse<T> = {\n docs?: T[];\n};\n\nexport type RBACTranslations = {\n [locale: string]: {\n // Collections types\n collections?: {\n permissionActions?: PermissionActionTypes.PermissionActionsCollectionTranslations[string];\n permissionFeatures?: PermissionFeatureTypes.PermissionFeaturesCollectionTranslations[string];\n permissions?: PermissionTypes.PermissionsCollectionTranslations[string];\n roles?: RoleTypes.RolesCollectionTranslations[string];\n rolesPermissions?: RolePermissionTypes.RolesPermissionsCollectionTranslations[string];\n users?: UsersTypes.UsersModificationTranslations[string];\n };\n // Components types\n components?: {\n rolePermissionMatrix?: RolePermissionMatrixClientTypes.RolePermissionMatrixClientTranslations[string];\n };\n };\n};\n\nexport type PayloadAuthRbacPluginConfig = {\n /**\n * Collection slugs to augment (may include plugin-only collections absent from generated `CollectionSlug`).\n */\n collections?: Partial<\n Record<\n string,\n | Omit<\n PermissionActionTypes.PermissionActionsCollectionParams,\n \"translations\"\n >\n | Omit<\n PermissionFeatureTypes.PermissionFeaturesCollectionParams,\n \"translations\"\n >\n | Omit<PermissionTypes.PermissionsCollectionParams, \"translations\">\n | Omit<RoleTypes.RolesCollectionParams, \"translations\">\n | Omit<\n RolePermissionTypes.RolesPermissionsCollectionParams,\n \"translations\"\n >\n >\n >;\n disabled?: boolean;\n translations?: RBACTranslations;\n autoModifyUsersCollection?: boolean;\n};\n"],"names":[],"mappings":"AAAA,oBAAoB;AAWpB,cAAc,4CAA4C;AAC1D,cAAc,6CAA6C;AAC3D,cAAc,qCAAqC;AACnD,cAAc,+BAA+B;AAC7C,cAAc,2CAA2C;AACzD,cAAc,+BAA+B;AAC7C,cAAc,sDAAsD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zealamic/payload-auth-rbac-plugin",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "A plugin for Payload CMS to manage authentication and authorization",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -27,33 +27,37 @@
|
|
|
27
27
|
],
|
|
28
28
|
"exports": {
|
|
29
29
|
".": {
|
|
30
|
-
"
|
|
30
|
+
"types": "./dist/index.d.ts",
|
|
31
|
+
"import": "./dist/index.js",
|
|
32
|
+
"default": "./dist/index.js"
|
|
31
33
|
},
|
|
32
34
|
"./client": {
|
|
33
|
-
"
|
|
35
|
+
"types": "./dist/exports/client.d.ts",
|
|
36
|
+
"import": "./dist/exports/client.js",
|
|
37
|
+
"default": "./dist/exports/client.js"
|
|
34
38
|
},
|
|
35
39
|
"./rsc": {
|
|
36
|
-
"
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
"default": "./src/types.ts"
|
|
40
|
+
"types": "./dist/exports/rsc.d.ts",
|
|
41
|
+
"import": "./dist/exports/rsc.js",
|
|
42
|
+
"default": "./dist/exports/rsc.js"
|
|
40
43
|
},
|
|
41
44
|
"./utils": {
|
|
42
|
-
"
|
|
45
|
+
"types": "./dist/lib/utils/index.d.ts",
|
|
46
|
+
"import": "./dist/lib/utils/index.js",
|
|
47
|
+
"default": "./dist/lib/utils/index.js"
|
|
43
48
|
}
|
|
44
49
|
},
|
|
45
|
-
"main": "./
|
|
46
|
-
"types": "./
|
|
50
|
+
"main": "./dist/index.js",
|
|
51
|
+
"types": "./dist/general-types.d.ts",
|
|
47
52
|
"files": [
|
|
48
|
-
"dist"
|
|
49
|
-
"docs",
|
|
50
|
-
"assets"
|
|
53
|
+
"dist"
|
|
51
54
|
],
|
|
52
55
|
"scripts": {
|
|
53
56
|
"copy:styles": "node -e \"require('fs').cpSync('src/styles', 'dist/styles', {recursive:true})\"",
|
|
54
|
-
"
|
|
57
|
+
"copy:general-types": "node -e \"require('fs').cpSync('src/general-types.d.ts', 'dist/general-types.d.ts', {recursive:true})\"",
|
|
58
|
+
"build": "yarn copyfiles && yarn build:types && yarn build:swc && yarn copy:styles && yarn copy:general-types",
|
|
55
59
|
"build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths",
|
|
56
|
-
"build:types": "tsc --
|
|
60
|
+
"build:types": "tsc --project tsconfig.build.json",
|
|
57
61
|
"clean": "rimraf {dist,*.tsbuildinfo}",
|
|
58
62
|
"copyfiles": "copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/",
|
|
59
63
|
"dev": "next dev dev --turbo",
|
|
@@ -64,6 +68,7 @@
|
|
|
64
68
|
"generate:types": "yarn dev:generate-types",
|
|
65
69
|
"lint": "biome check",
|
|
66
70
|
"lint:fix": "biome check --write",
|
|
71
|
+
"prepublishOnly": "yarn clean && yarn build",
|
|
67
72
|
"test": "yarn test:int && yarn test:e2e",
|
|
68
73
|
"test:e2e": "playwright test",
|
|
69
74
|
"test:int": "vitest"
|
|
@@ -108,31 +113,7 @@
|
|
|
108
113
|
"node": "^18.20.2 || >=20.9.0"
|
|
109
114
|
},
|
|
110
115
|
"publishConfig": {
|
|
111
|
-
"access": "public"
|
|
112
|
-
"main": "./dist/index.js",
|
|
113
|
-
"types": "./dist/index.d.ts",
|
|
114
|
-
"exports": {
|
|
115
|
-
".": {
|
|
116
|
-
"types": "./dist/index.d.ts",
|
|
117
|
-
"default": "./dist/index.js"
|
|
118
|
-
},
|
|
119
|
-
"./client": {
|
|
120
|
-
"types": "./dist/exports/client.d.ts",
|
|
121
|
-
"default": "./dist/exports/client.js"
|
|
122
|
-
},
|
|
123
|
-
"./rsc": {
|
|
124
|
-
"types": "./dist/exports/rsc.d.ts",
|
|
125
|
-
"default": "./dist/exports/rsc.js"
|
|
126
|
-
},
|
|
127
|
-
"./types": {
|
|
128
|
-
"types": "./dist/types.d.ts",
|
|
129
|
-
"default": "./dist/types.js"
|
|
130
|
-
},
|
|
131
|
-
"./utils": {
|
|
132
|
-
"types": "./dist/lib/utils/index.d.ts",
|
|
133
|
-
"default": "./dist/lib/utils/index.js"
|
|
134
|
-
}
|
|
135
|
-
}
|
|
116
|
+
"access": "public"
|
|
136
117
|
},
|
|
137
118
|
"registry": "https://registry.npmjs.org/",
|
|
138
119
|
"dependencies": {}
|
package/assets/cover-photo.jpg
DELETED
|
Binary file
|