@zealamic/payload-auth-rbac-plugin 1.0.1 → 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.
Files changed (55) hide show
  1. package/README.md +17 -2
  2. package/dist/collections/users/index.js +11 -8
  3. package/dist/collections/users/index.js.map +1 -1
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/types.d.ts +6 -0
  7. package/dist/types.js.map +1 -1
  8. package/package.json +20 -16
  9. package/assets/cover-photo.jpg +0 -0
  10. package/docs/COLLECTIONS.md +0 -440
  11. package/docs/TRANSLATIONS.md +0 -469
  12. package/docs/UTILS.md +0 -226
  13. package/src/collections/permission-actions/default-data.ts +0 -36
  14. package/src/collections/permission-actions/index.ts +0 -144
  15. package/src/collections/permission-actions/types.ts +0 -56
  16. package/src/collections/permission-features/default-data.ts +0 -30
  17. package/src/collections/permission-features/index.ts +0 -122
  18. package/src/collections/permission-features/types.ts +0 -47
  19. package/src/collections/permissions/default-data.ts +0 -38
  20. package/src/collections/permissions/index.ts +0 -160
  21. package/src/collections/permissions/types.ts +0 -57
  22. package/src/collections/roles/default-data.ts +0 -44
  23. package/src/collections/roles/hooks/sync-permission-matrix-draft.ts +0 -73
  24. package/src/collections/roles/index.ts +0 -178
  25. package/src/collections/roles/types.ts +0 -56
  26. package/src/collections/roles-permissions/default-data.ts +0 -28
  27. package/src/collections/roles-permissions/index.ts +0 -107
  28. package/src/collections/roles-permissions/types.ts +0 -42
  29. package/src/collections/users/default-data.ts +0 -19
  30. package/src/collections/users/index.ts +0 -148
  31. package/src/collections/users/parent-path.ts +0 -310
  32. package/src/collections/users/types.ts +0 -25
  33. package/src/components/role-permission-matrix-client/default-data.ts +0 -25
  34. package/src/components/role-permission-matrix-client/index.tsx +0 -369
  35. package/src/components/role-permission-matrix-client/matrix.module.scss +0 -66
  36. package/src/components/role-permission-matrix-client/types.ts +0 -16
  37. package/src/endpoints/customEndpointHandler.ts +0 -5
  38. package/src/exports/client.ts +0 -1
  39. package/src/exports/rsc.ts +0 -0
  40. package/src/index.ts +0 -249
  41. package/src/lib/constants/general.ts +0 -1
  42. package/src/lib/constants/index.ts +0 -15
  43. package/src/lib/constants/permission-action.ts +0 -9
  44. package/src/lib/constants/permission-feature.ts +0 -4
  45. package/src/lib/constants/permission.ts +0 -4
  46. package/src/lib/constants/role.ts +0 -10
  47. package/src/lib/constants/user.ts +0 -1
  48. package/src/lib/utils/access.ts +0 -611
  49. package/src/lib/utils/data.ts +0 -7
  50. package/src/lib/utils/fields.ts +0 -62
  51. package/src/lib/utils/index.ts +0 -4
  52. package/src/lib/utils/localization.ts +0 -106
  53. package/src/styles/variables.scss +0 -1
  54. package/src/types.ts +0 -64
  55. /package/{src → dist}/general-types.d.ts +0 -0
package/README.md CHANGED
@@ -61,7 +61,22 @@ export default buildConfig({
61
61
  });
62
62
  ```
63
63
 
64
- ### 2. Seed RBAC data (Admin or script)
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
- ### 3. Protect app collections
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: "users",
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
- ...collection.fields,
104
- ...pluginFields
103
+ ...pluginFields,
104
+ ...collection.fields
105
105
  ],
106
106
  access: {
107
- ...defaultAccess,
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, PayloadRequest } 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): 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: \"users\",\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 ...config.admin,\n };\n\n const pluginFields = getArrayOfMergedFieldAffectingData({\n defaultFields: buildDefaultFields(translations),\n fields: customFields,\n });\n\n const existing = (config.collections || []).find(\n (c) => c.slug === userSlug,\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: [...collection.fields, ...pluginFields],\n access: {\n ...defaultAccess,\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","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","userSlug","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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"}
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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"}
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.1",
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,34 +27,37 @@
27
27
  ],
28
28
  "exports": {
29
29
  ".": {
30
- "default": "./src/index.ts"
30
+ "types": "./dist/index.d.ts",
31
+ "import": "./dist/index.js",
32
+ "default": "./dist/index.js"
31
33
  },
32
34
  "./client": {
33
- "default": "./src/exports/client.ts"
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
- "default": "./src/exports/rsc.ts"
37
- },
38
- "./types": {
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
- "default": "./src/lib/utils/index.ts"
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": "./src/index.ts",
46
- "types": "./src/general.d.ts",
50
+ "main": "./dist/index.js",
51
+ "types": "./dist/general-types.d.ts",
47
52
  "files": [
48
- "dist",
49
- "docs",
50
- "assets",
51
- "src"
53
+ "dist"
52
54
  ],
53
55
  "scripts": {
54
56
  "copy:styles": "node -e \"require('fs').cpSync('src/styles', 'dist/styles', {recursive:true})\"",
55
- "build": "yarn copyfiles && yarn build:types && yarn build:swc && yarn copy:styles",
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",
56
59
  "build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths",
57
- "build:types": "tsc --outDir dist --rootDir ./src",
60
+ "build:types": "tsc --project tsconfig.build.json",
58
61
  "clean": "rimraf {dist,*.tsbuildinfo}",
59
62
  "copyfiles": "copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/",
60
63
  "dev": "next dev dev --turbo",
@@ -65,6 +68,7 @@
65
68
  "generate:types": "yarn dev:generate-types",
66
69
  "lint": "biome check",
67
70
  "lint:fix": "biome check --write",
71
+ "prepublishOnly": "yarn clean && yarn build",
68
72
  "test": "yarn test:int && yarn test:e2e",
69
73
  "test:e2e": "playwright test",
70
74
  "test:int": "vitest"
Binary file