settings-store-rw-permissions-plugin.ts 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import { Permission, RwPermissionDefinition, SettingsStoreScopes, VendurePlugin } from '@vendure/core';
  2. /**
  3. * Custom RwPermissionDefinition for testing dashboard saved views
  4. */
  5. export const dashboardSavedViewsPermission = new RwPermissionDefinition('DashboardSavedViews');
  6. /**
  7. * Test plugin that demonstrates the new read/write permission functionality
  8. * for settings store fields.
  9. */
  10. @VendurePlugin({
  11. configuration: config => {
  12. // Add custom permissions
  13. config.authOptions = {
  14. ...config.authOptions,
  15. customPermissions: [
  16. ...(config.authOptions?.customPermissions || []),
  17. dashboardSavedViewsPermission,
  18. ],
  19. };
  20. config.settingsStoreFields = {
  21. ...config.settingsStoreFields,
  22. rwtest: [
  23. {
  24. name: 'separateReadWrite',
  25. scope: SettingsStoreScopes.global,
  26. // User can read with ReadCatalog but write with UpdateCatalog
  27. requiresPermission: {
  28. read: Permission.ReadCatalog,
  29. write: Permission.UpdateCatalog,
  30. },
  31. },
  32. {
  33. name: 'dashboardSavedViews',
  34. scope: SettingsStoreScopes.global,
  35. // Using custom RwPermissionDefinition for dashboard saved views
  36. requiresPermission: {
  37. read: dashboardSavedViewsPermission.Read,
  38. write: dashboardSavedViewsPermission.Write,
  39. },
  40. },
  41. {
  42. name: 'multipleReadPermissions',
  43. scope: SettingsStoreScopes.global,
  44. // Multiple permissions for read (OR logic)
  45. requiresPermission: {
  46. read: [Permission.ReadCatalog, Permission.ReadSettings],
  47. write: Permission.UpdateSettings,
  48. },
  49. },
  50. {
  51. name: 'backwardCompatible',
  52. scope: SettingsStoreScopes.global,
  53. // Still supports old requiresPermission (applies to both read and write)
  54. requiresPermission: Permission.UpdateSettings,
  55. },
  56. {
  57. name: 'readOnlyAccess',
  58. scope: SettingsStoreScopes.global,
  59. // Read-only field - anyone with ReadSettings can read, no one can write via API
  60. requiresPermission: {
  61. read: Permission.ReadSettings,
  62. // No write permission means only authenticated users can write (will be blocked by readonly)
  63. },
  64. readonly: true,
  65. },
  66. {
  67. name: 'publicRead',
  68. scope: SettingsStoreScopes.global,
  69. // Anyone authenticated can read, but only admins can write
  70. requiresPermission: {
  71. read: Permission.Authenticated,
  72. write: Permission.CreateAdministrator,
  73. },
  74. },
  75. ],
  76. };
  77. return config;
  78. },
  79. })
  80. export class SettingsStoreRwPermissionsPlugin {}