@firecms/user_management 3.0.0-canary.235 → 3.0.0-canary.237

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/utils/permissions.ts","../src/utils/local_storage.ts","../src/utils/colors.ts","../src/hooks/useBuildUserManagement.tsx","../src/UserManagementProvider.tsx","../src/hooks/useUserManagement.tsx","../src/components/roles/RoleChip.tsx","../src/components/roles/RolesDetailsForm.tsx","../src/components/roles/default_roles.tsx","../src/components/roles/RolesTable.tsx","../src/components/roles/RolesView.tsx","../src/components/users/UserDetailsForm.tsx","../src/components/users/UsersTable.tsx","../src/components/users/UsersView.tsx","../src/useUserManagementPlugin.tsx","../src/admin_views.tsx"],"sourcesContent":["import { EntityCollection, Permissions, Role, User } from \"@firecms/core\";\n\nexport const RESERVED_GROUPS = [\"Admin\"];\n\nconst DEFAULT_PERMISSIONS = {\n read: false,\n edit: false,\n create: false,\n delete: false\n};\n\nexport function resolveUserRolePermissions<USER extends User>\n({\n collection,\n user\n }: {\n collection: EntityCollection<any>,\n user: USER | null\n}): Permissions {\n\n const roles = user?.roles;\n if (!roles) {\n return DEFAULT_PERMISSIONS;\n } else if (collection.ownerId === user?.uid) {\n return {\n read: true,\n create: true,\n edit: true,\n delete: true\n };\n } else {\n const basePermissions = {\n read: false,\n create: false,\n edit: false,\n delete: false\n };\n\n return roles\n .map(role => resolveCollectionRole(role, collection.id))\n .reduce(mergePermissions, basePermissions);\n }\n}\n\nfunction resolveCollectionRole(role: Role, id: string): Permissions {\n\n const basePermissions = {\n read: (role.isAdmin || role.defaultPermissions?.read) ?? false,\n create: (role.isAdmin || role.defaultPermissions?.create) ?? false,\n edit: (role.isAdmin || role.defaultPermissions?.edit) ?? false,\n delete: (role.isAdmin || role.defaultPermissions?.delete) ?? false\n };\n const thisCollectionPermissions = role.collectionPermissions?.[id];\n if (thisCollectionPermissions) {\n return mergePermissions(thisCollectionPermissions, basePermissions);\n } else if (role.defaultPermissions) {\n return mergePermissions(role.defaultPermissions, basePermissions);\n } else {\n return basePermissions;\n }\n}\n\nconst mergePermissions = (permA: Permissions, permB: Permissions) => {\n return {\n read: permA.read || permB.read,\n create: permA.create || permB.create,\n edit: permA.edit || permB.edit,\n delete: permA.delete || permB.delete\n };\n}\n\nexport function getUserRoles(roles: Role[], fireCMSUser: User): Role[] | undefined {\n return !roles\n ? undefined\n : (fireCMSUser.roles\n ? fireCMSUser.roles\n .map(role => roles.find((r) => r.id === role.id))\n .filter(Boolean) as Role[]\n : []);\n}\n\nexport const areRolesEqual = (rolesA: Role[], rolesB: Role[]) => {\n const rolesAIds = rolesA.map(r => r.id);\n const rolesBIds = rolesB.map(r => r.id);\n return rolesAIds.length === rolesB.length && rolesAIds.every((role) => rolesBIds.includes(role));\n}\n","// const tokens = new Map<string, {\n// token: string,\n// expiry: Date\n// }>();\n\nexport function cacheDelegatedLoginToken(projectId: string, delegatedToken?: string) {\n if (!delegatedToken) {\n return;\n }\n\n const data = parseJwt(delegatedToken);\n // @ts-ignore\n const expiry = new Date(data.exp * 1000);\n localStorage.setItem(`auth_token::${projectId}`, JSON.stringify({\n token: delegatedToken,\n expiry\n }));\n\n}\n\nexport function getDelegatedLoginTokenFromCache(projectId: string) {\n const entry = localStorage.getItem(`auth_token::${projectId}`);\n if (entry) {\n const data = JSON.parse(entry);\n data.expiry = new Date(data.expiry);\n if (data.expiry > new Date()) {\n return data.token;\n }\n }\n return undefined;\n}\n\nexport function clearDelegatedLoginTokensCache() {\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(\"auth_token::\")) {\n localStorage.removeItem(key);\n }\n }\n}\n\nfunction parseJwt(token?: string): object {\n if (!token) {\n throw new Error(\"No JWT token\");\n }\n const base64Url = token.split(\".\")[1];\n const base64 = base64Url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const jsonPayload = decodeURIComponent(window.atob(base64).split(\"\").map(function (c) {\n return \"%\" + (\"00\" + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(\"\"));\n\n return JSON.parse(jsonPayload);\n}\n","export function darkenColor(hexColor: string, darkenBy = 10): string {\n // Check input validity\n if (!/^#([0-9A-Fa-f]{3}){1,2}$/.test(hexColor)) {\n throw new Error(\"Invalid color format\");\n }\n\n // If shorthand form, convert to full form\n let color = hexColor.substring(1).split(\"\");\n if (color.length === 3) {\n color = [color[0], color[0], color[1], color[1], color[2], color[2]];\n }\n\n // Convert to RGB values\n let r = parseInt(color[0] + color[1], 16);\n let g = parseInt(color[2] + color[3], 16);\n let b = parseInt(color[4] + color[5], 16);\n\n // Reduce each color component by the specified percentage (darkenBy)\n r = Math.floor(r * (1 - darkenBy / 100));\n g = Math.floor(g * (1 - darkenBy / 100));\n b = Math.floor(b * (1 - darkenBy / 100));\n\n // Recombine into hex and return\n return \"#\" +\n (r < 16 ? \"0\" : \"\") + r.toString(16) +\n (g < 16 ? \"0\" : \"\") + g.toString(16) +\n (b < 16 ? \"0\" : \"\") + b.toString(16);\n}\n\nexport function hexToRgbaWithOpacity(hexColor: string, opacity = 10): string {\n // Check input validity\n if (!/^#([0-9A-Fa-f]{3}){1,2}$/.test(hexColor)) {\n throw new Error(\"Invalid color format\");\n }\n\n // If shorthand form, convert to full form\n let color = hexColor.substring(1).split(\"\");\n if (color.length === 3) {\n color = [color[0], color[0], color[1], color[1], color[2], color[2]];\n }\n\n // Convert to RGB values\n const r = parseInt(color[0] + color[1], 16);\n const g = parseInt(color[2] + color[3], 16);\n const b = parseInt(color[4] + color[5], 16);\n\n // Convert opacity to a decimal for CSS\n const alpha = opacity / 100;\n\n // Construct and return the RGBA color\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n","import React, { useCallback, useEffect } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { UserManagement } from \"../types\";\nimport {\n AuthController,\n Authenticator,\n DataSourceDelegate,\n Entity,\n PermissionsBuilder,\n removeUndefined,\n Role,\n User\n} from \"@firecms/core\";\nimport { resolveUserRolePermissions } from \"../utils\";\n\ntype UserWithRoleIds<USER extends User = any> = Omit<USER, \"roles\"> & { roles: string[] };\n\nexport interface UserManagementParams<CONTROLLER extends AuthController<any> = AuthController<any>> {\n\n authController: CONTROLLER;\n\n /**\n * The delegate in charge of persisting the data.\n */\n dataSourceDelegate?: DataSourceDelegate;\n\n /**\n * Path where the plugin users configuration is stored.\n * Default: __FIRECMS/config/users\n * You can specify a different path if you want to store the user management configuration in a different place.\n * Please keep in mind that the FireCMS users are not necessarily the same as the Firebase users (but they can be).\n * The path should be relative to the root of the database, and should always have an odd number of segments.\n */\n usersPath?: string;\n\n /**\n * Path where the plugin roles configuration is stored.\n * Default: __FIRECMS/config/roles\n */\n rolesPath?: string;\n\n /**\n * If there are no roles in the database, provide a button to create the default roles.\n */\n allowDefaultRolesCreation?: boolean;\n\n /**\n * Include the collection config permissions in the user management system.\n */\n includeCollectionConfigPermissions?: boolean;\n\n}\n\n/**\n * This hook is used to build a user management object that can be used to\n * manage users and roles in a Firestore backend.\n * @param authController\n * @param dataSourceDelegate\n * @param usersPath\n * @param rolesPath\n * @param allowDefaultRolesCreation\n * @param includeCollectionConfigPermissions\n */\nexport function useBuildUserManagement<CONTROLLER extends AuthController<any> = AuthController<any>,\n USER extends User = CONTROLLER extends AuthController<infer U> ? U : any>\n({\n authController,\n dataSourceDelegate,\n usersPath = \"__FIRECMS/config/users\",\n rolesPath = \"__FIRECMS/config/roles\",\n allowDefaultRolesCreation,\n includeCollectionConfigPermissions\n }: UserManagementParams<CONTROLLER>): UserManagement<USER> & CONTROLLER {\n\n if (!authController) {\n throw Error(\"useBuildUserManagement: You need to provide an authController since version 3.0.0-beta.11. Check https://firecms.co/docs/pro/migrating_from_v3_beta\");\n }\n\n const [rolesLoading, setRolesLoading] = React.useState<boolean>(true);\n const [usersLoading, setUsersLoading] = React.useState<boolean>(true);\n const [roles, setRoles] = React.useState<Role[]>([]);\n const [usersWithRoleIds, setUsersWithRoleIds] = React.useState<UserWithRoleIds<USER>[]>([]);\n\n const users = usersWithRoleIds.map(u => ({\n ...u,\n roles: roles.filter(r => u.roles?.includes(r.id))\n }) as USER);\n\n const [rolesError, setRolesError] = React.useState<Error | undefined>();\n const [usersError, setUsersError] = React.useState<Error | undefined>();\n\n const _usersLoading = usersLoading;\n const _rolesLoading = rolesLoading;\n\n const loading = _rolesLoading || _usersLoading;\n\n useEffect(() => {\n if (!dataSourceDelegate || !rolesPath) return;\n if (dataSourceDelegate.initialised !== undefined && !dataSourceDelegate.initialised) return;\n if (authController?.initialLoading) return;\n // if (authController.user === null) {\n // setRolesLoading(false);\n // return;\n // }\n\n setRolesLoading(true);\n return dataSourceDelegate.listenCollection?.({\n path: rolesPath,\n onUpdate(entities: Entity<any>[]): void {\n setRolesError(undefined);\n try {\n const newRoles = entityToRoles(entities);\n if (!equal(newRoles, roles)) {\n setRoles(newRoles);\n }\n } catch (e) {\n setRoles([]);\n console.error(\"Error loading roles\", e);\n setRolesError(e as Error);\n }\n setRolesLoading(false);\n },\n onError(e: any): void {\n setRoles([]);\n console.error(\"Error loading roles\", e);\n setRolesError(e);\n setRolesLoading(false);\n }\n });\n\n }, [dataSourceDelegate?.initialised, authController?.initialLoading, authController?.user?.uid, rolesPath]);\n\n useEffect(() => {\n if (!dataSourceDelegate || !usersPath) return;\n if (dataSourceDelegate.initialised !== undefined && !dataSourceDelegate.initialised) {\n return;\n }\n if (authController?.initialLoading) {\n return;\n }\n\n setUsersLoading(true);\n return dataSourceDelegate.listenCollection?.({\n path: usersPath,\n onUpdate(entities: Entity<any>[]): void {\n console.debug(\"Updating users\", entities);\n setUsersError(undefined);\n try {\n const newUsers = entitiesToUsers(entities);\n // if (!equal(newUsers, usersWithRoleIds))\n setUsersWithRoleIds(newUsers);\n } catch (e) {\n setUsersWithRoleIds([]);\n console.error(\"Error loading users\", e);\n setUsersError(e as Error);\n }\n setUsersLoading(false);\n },\n onError(e: any): void {\n console.error(\"Error loading users\", e);\n setUsersWithRoleIds([]);\n setUsersError(e);\n setUsersLoading(false);\n }\n });\n\n }, [dataSourceDelegate?.initialised, authController?.initialLoading, authController?.user?.uid, usersPath]);\n\n const saveUser = useCallback(async (user: USER): Promise<USER> => {\n if (!dataSourceDelegate) throw Error(\"useBuildUserManagement Firebase not initialised\");\n if (!usersPath) throw Error(\"useBuildUserManagement Firestore not initialised\");\n\n console.debug(\"Persisting user\", user);\n\n const roleIds = user.roles?.map(r => r.id);\n const email = user.email?.toLowerCase().trim();\n if (!email) throw Error(\"Email is required\");\n\n const userExists = users.find(u => u.email?.toLowerCase() === email);\n const data = {\n ...user,\n roles: roleIds ?? []\n };\n if (!userExists) {\n // @ts-ignore\n data.created_on = new Date();\n }\n\n return dataSourceDelegate.saveEntity({\n status: \"existing\",\n path: usersPath,\n entityId: email,\n values: removeUndefined(data)\n }).then(() => user);\n }, [usersPath, dataSourceDelegate?.initialised]);\n\n const saveRole = useCallback((role: Role): Promise<void> => {\n if (!dataSourceDelegate) throw Error(\"useBuildUserManagement Firebase not initialised\");\n if (!rolesPath) throw Error(\"useBuildUserManagement Firestore not initialised\");\n console.debug(\"Persisting role\", role);\n const {\n id,\n ...roleData\n } = role;\n return dataSourceDelegate.saveEntity({\n status: \"existing\",\n path: rolesPath,\n entityId: id,\n values: removeUndefined(roleData)\n }).then(() => {\n return;\n });\n }, [rolesPath, dataSourceDelegate?.initialised]);\n\n const deleteUser = useCallback(async (user: User): Promise<void> => {\n if (!dataSourceDelegate) throw Error(\"useBuildUserManagement Firebase not initialised\");\n if (!usersPath) throw Error(\"useBuildUserManagement Firestore not initialised\");\n console.debug(\"Deleting\", user);\n const { uid } = user;\n const entity: Entity<any> = {\n path: usersPath,\n id: uid,\n values: {}\n };\n await dataSourceDelegate.deleteEntity({ entity })\n }, [usersPath, dataSourceDelegate?.initialised]);\n\n const deleteRole = useCallback(async (role: Role): Promise<void> => {\n if (!dataSourceDelegate) throw Error(\"useBuildUserManagement Firebase not initialised\");\n if (!rolesPath) throw Error(\"useBuildUserManagement Firestore not initialised\");\n console.debug(\"Deleting\", role);\n const { id } = role;\n const entity: Entity<any> = {\n path: rolesPath,\n id: id,\n values: {}\n };\n await dataSourceDelegate.deleteEntity({ entity })\n }, [rolesPath, dataSourceDelegate?.initialised]);\n\n const collectionPermissions: PermissionsBuilder = useCallback(({\n collection,\n user\n }) =>\n resolveUserRolePermissions({\n collection,\n user\n }), []);\n\n const defineRolesFor: ((user: User) => Role[] | undefined) = useCallback((user) => {\n if (!usersWithRoleIds) throw Error(\"Users not loaded\");\n const users = usersWithRoleIds.map(u => ({\n ...u,\n roles: roles.filter(r => u.roles?.includes(r.id))\n }) as User);\n const mgmtUser = users.find(u => u.email?.toLowerCase() === user?.email?.toLowerCase());\n return mgmtUser?.roles;\n }, [roles, usersWithRoleIds]);\n\n const authenticator: Authenticator<USER> = useCallback(({ user }) => {\n if (loading) {\n return false;\n }\n\n if (users.length === 0) {\n console.warn(\"No users created yet\");\n return true; // If there are no users created yet, we allow access to every user\n }\n\n const mgmtUser = users.find(u => u.email?.toLowerCase() === user?.email?.toLowerCase());\n if (mgmtUser) {\n console.debug(\"User found in user management system\", mgmtUser);\n return true;\n }\n\n throw Error(\"Could not find a user with the provided email in the user management system.\");\n }, [loading, users]);\n\n const userRoles = authController.user ? defineRolesFor(authController.user) : undefined;\n const isAdmin = (userRoles ?? []).some(r => r.id === \"admin\");\n\n const userRoleIds = userRoles?.map(r => r.id);\n useEffect(() => {\n console.debug(\"Setting roles\", userRoles);\n authController.setUserRoles?.(userRoles ?? []);\n }, [userRoleIds]);\n\n return {\n loading,\n roles,\n users,\n saveUser,\n saveRole,\n rolesError,\n deleteUser,\n deleteRole,\n usersError,\n isAdmin,\n allowDefaultRolesCreation: allowDefaultRolesCreation === undefined ? true : allowDefaultRolesCreation,\n includeCollectionConfigPermissions: Boolean(includeCollectionConfigPermissions),\n collectionPermissions,\n defineRolesFor,\n authenticator,\n ...authController,\n initialLoading: authController.initialLoading || loading,\n userRoles: userRoles,\n user: authController.user ? {\n ...authController.user,\n roles: userRoles\n } : null\n }\n}\n\nconst entitiesToUsers = (docs: Entity<Omit<UserWithRoleIds, \"id\">>[]): (UserWithRoleIds)[] => {\n return docs.map((doc) => {\n const data = doc.values as any;\n const newVar = {\n uid: doc.id,\n ...data,\n created_on: data?.created_on,\n updated_on: data?.updated_on\n };\n return newVar as (UserWithRoleIds);\n });\n}\n\nconst entityToRoles = (entities: Entity<Omit<Role, \"id\">>[]): Role[] => {\n return entities.map((doc) => ({\n id: doc.id,\n ...doc.values\n } as Role));\n}\n","import React, { PropsWithChildren } from \"react\";\nimport { UserManagement } from \"./types\";\nimport { User } from \"@firecms/core\";\n\nexport const UserManagementContext = React.createContext<UserManagement<any>>({} as any);\n\nexport interface UserManagementProviderProps<U extends User = User> {\n userManagement: UserManagement<U>\n}\n\nexport function UserManagementProvider<U extends User = User>({\n children,\n userManagement\n }: PropsWithChildren<UserManagementProviderProps<U>>) {\n return (\n <UserManagementContext.Provider value={userManagement}>\n {children}\n </UserManagementContext.Provider>\n );\n};\n","import { useContext } from \"react\";\nimport { UserManagement } from \"../types\";\nimport { UserManagementContext } from \"../UserManagementProvider\";\nimport { User } from \"@firecms/core\";\nexport const useUserManagement = <USER extends User>() => useContext<UserManagement<USER>>(UserManagementContext);\n","import { Chip, getColorSchemeForSeed } from \"@firecms/ui\";\nimport { Role } from \"@firecms/core\";\n\nexport type RoleChipProps = {\n role: Role;\n}\n\nexport function RoleChip({ role }: RoleChipProps) {\n let colorScheme;\n if (role.isAdmin) {\n colorScheme = \"blueDarker\";\n } else if (role.id === \"editor\") {\n colorScheme = \"yellowLight\";\n } else if (role.id === \"viewer\") {\n colorScheme = \"grayLight\";\n } else {\n colorScheme = getColorSchemeForSeed(role.id);\n }\n\n return (\n <Chip\n colorScheme={colorScheme}\n key={role.id}>\n {role.name}\n </Chip>\n );\n\n}\n","import React, { useCallback, useState } from \"react\";\nimport * as Yup from \"yup\";\n\nimport { EntityCollection, FieldCaption, Role, toSnakeCase, useAuthController, User, } from \"@firecms/core\";\nimport {\n Button,\n Checkbox,\n CheckIcon,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n LoadingButton,\n Paper,\n Select,\n SelectItem,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n TextField,\n Tooltip,\n Typography\n} from \"@firecms/ui\";\nimport { useUserManagement } from \"../../hooks\";\nimport { Formex, getIn, useCreateFormex } from \"@firecms/formex\";\n\nexport const RoleYupSchema = Yup.object().shape({\n id: Yup.string().required(\"Required\"),\n name: Yup.string().required(\"Required\")\n});\n\nfunction canRoleBeEdited(loggedUser: User) {\n const loggedUserIsAdmin = loggedUser.roles?.map(r => r.id).includes(\"admin\");\n if (!loggedUserIsAdmin) {\n throw new Error(\"Only admins can edit roles\");\n }\n\n return true;\n}\n\nexport function RolesDetailsForm({\n open,\n role,\n editable,\n handleClose,\n collections\n }: {\n open: boolean,\n editable?: boolean,\n role?: Role,\n handleClose: () => void,\n collections?: EntityCollection[]\n}) {\n\n const { saveRole } = useUserManagement();\n const isNewRole = !role;\n const {\n user: loggedInUser\n } = useAuthController();\n\n const [savingError, setSavingError] = useState<Error | undefined>();\n\n const onRoleUpdated = useCallback((role: Role) => {\n setSavingError(undefined);\n if (!loggedInUser) throw new Error(\"User not found\");\n canRoleBeEdited(loggedInUser);\n return saveRole(role);\n }, [saveRole, loggedInUser]);\n\n const formex = useCreateFormex({\n initialValues: role ?? {\n name: \"\"\n } as Role,\n onSubmit: (role: Role, formexController) => {\n try {\n return onRoleUpdated(role)\n .then(() => {\n formexController.resetForm({\n values: role\n });\n handleClose();\n })\n .catch(e => {\n setSavingError(e);\n });\n } catch (e: any) {\n setSavingError(e);\n return Promise.resolve();\n }\n },\n validation: (values) => {\n return RoleYupSchema.validate(values, { abortEarly: false })\n .then(() => ({}))\n .catch((e) => {\n const errors: Record<string, string> = {};\n e.inner.forEach((error: any) => {\n errors[error.path] = error.message;\n });\n return errors;\n });\n }\n\n });\n\n const {\n isSubmitting,\n touched,\n values,\n errors,\n handleChange,\n setFieldValue,\n dirty,\n setFieldTouched\n } = formex;\n\n const isAdmin = values.isAdmin ?? false;\n const defaultCreate = values.defaultPermissions?.create ?? false;\n const defaultRead = values.defaultPermissions?.read ?? false;\n const defaultEdit = values.defaultPermissions?.edit ?? false;\n const defaultDelete = values.defaultPermissions?.delete ?? false;\n\n React.useEffect(() => {\n const idTouched = getIn(touched, \"id\");\n if (!idTouched && values.name) {\n setFieldValue(\"id\", toSnakeCase(values.name))\n }\n }, [touched, values.name]);\n\n return (\n <Dialog\n open={open}\n maxWidth={\"4xl\"}\n >\n <Formex value={formex}>\n <form noValidate\n autoComplete={\"off\"}\n onSubmit={formex.handleSubmit}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n position: \"relative\",\n height: \"100%\"\n }}>\n <DialogTitle variant={\"h4\"} gutterBottom={false}>\n Role\n </DialogTitle>\n <DialogContent className=\"flex-grow\">\n\n <div className={\"grid grid-cols-12 gap-8\"}>\n\n <div className={\"col-span-12 md:col-span-8\"}>\n <TextField\n name=\"name\"\n required\n error={touched.name && Boolean(errors.name)}\n value={values.name}\n disabled={isAdmin || !editable}\n onChange={handleChange}\n aria-describedby=\"name-helper-text\"\n label=\"Name\"\n />\n <FieldCaption>\n {touched.name && Boolean(errors.name) ? errors.name : \"Name of this role\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12 md:col-span-4\"}>\n <TextField\n name=\"id\"\n required\n error={touched.id && Boolean(errors.id)}\n value={values.id}\n disabled={!isNewRole || !editable}\n onChange={(e) => {\n handleChange(e);\n setFieldTouched(\"id\", true)\n }}\n aria-describedby=\"id-helper-text\"\n label=\"ID\"\n />\n <FieldCaption>\n {touched.id && Boolean(errors.id) ? errors.id : \"ID of this role\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12\"}>\n <Paper className=\"bg-inherit overflow-hidden\">\n <Table className={\"w-full rounded-md\"}>\n <TableHeader className={\"rounded-md\"}>\n <TableCell></TableCell>\n <TableCell\n align=\"center\">Create\n entities\n </TableCell>\n <TableCell\n align=\"center\">Read\n entities\n </TableCell>\n <TableCell\n align=\"center\">Update\n entities\n </TableCell>\n <TableCell\n align=\"center\">Delete\n entities\n </TableCell>\n <TableCell\n align=\"center\">\n </TableCell>\n </TableHeader>\n\n <TableBody>\n <TableRow>\n <TableCell\n scope=\"row\">\n <strong>All\n collections</strong>\n </TableCell>\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Create entities in collections\">\n <Checkbox\n disabled={isAdmin || !editable}\n checked={(isAdmin || defaultCreate) ?? false}\n onCheckedChange={(checked) => setFieldValue(\"defaultPermissions.create\", checked)}\n />\n </Tooltip>\n </TableCell>\n\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Access all data in every collection\">\n <Checkbox\n disabled={isAdmin || !editable}\n checked={(isAdmin || defaultRead) ?? false}\n onCheckedChange={(checked) => setFieldValue(\"defaultPermissions.read\", checked)}\n />\n </Tooltip>\n </TableCell>\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Update data in any collection\">\n <Checkbox\n disabled={isAdmin || !editable}\n checked={(isAdmin || defaultEdit) ?? false}\n onCheckedChange={(checked) => setFieldValue(\"defaultPermissions.edit\", checked)}\n />\n </Tooltip>\n </TableCell>\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Delete data in any collection\">\n <Checkbox\n disabled={isAdmin || !editable}\n checked={(isAdmin || defaultDelete) ?? false}\n onCheckedChange={(checked) => setFieldValue(\"defaultPermissions.delete\", checked)}\n />\n\n </Tooltip>\n </TableCell>\n <TableCell\n align=\"center\">\n </TableCell>\n </TableRow>\n {collections && collections.map((col) => (\n <TableRow key={col.name}>\n <TableCell\n scope=\"row\">\n {col.name}\n </TableCell>\n <TableCell\n align=\"center\">\n <Checkbox\n disabled={isAdmin || defaultCreate || !editable}\n checked={(isAdmin || defaultCreate || getIn(values, `collectionPermissions.${col.id}.create`)) ?? false}\n onCheckedChange={(checked) => setFieldValue(`collectionPermissions.${col.id}.create`, checked)}/>\n </TableCell>\n <TableCell\n align=\"center\">\n <Checkbox\n disabled={isAdmin || defaultRead || !editable}\n checked={(isAdmin || defaultRead || getIn(values, `collectionPermissions.${col.id}.read`)) ?? false}\n onCheckedChange={(checked) => setFieldValue(`collectionPermissions.${col.id}.read`, checked)}/>\n </TableCell>\n <TableCell\n align=\"center\">\n <Checkbox\n disabled={isAdmin || defaultEdit || !editable}\n checked={(isAdmin || defaultEdit || getIn(values, `collectionPermissions.${col.id}.edit`)) ?? false}\n onCheckedChange={(checked) => setFieldValue(`collectionPermissions.${col.id}.edit`, checked)}/>\n </TableCell>\n <TableCell\n align=\"center\">\n <Checkbox\n disabled={isAdmin || defaultDelete || !editable}\n checked={(isAdmin || defaultDelete || getIn(values, `collectionPermissions.${col.id}.delete`)) ?? false}\n onCheckedChange={(checked) => setFieldValue(`collectionPermissions.${col.id}.delete`, checked)}/>\n </TableCell>\n\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Allow all permissions in this collections\">\n <Button\n className={\"color-inherit\"}\n onClick={() => {\n setFieldValue(`collectionPermissions.${col.id}.create`, true);\n setFieldValue(`collectionPermissions.${col.id}.read`, true);\n setFieldValue(`collectionPermissions.${col.id}.edit`, true);\n setFieldValue(`collectionPermissions.${col.id}.delete`, true);\n }}\n disabled={isAdmin || !editable}\n variant={\"text\"}>\n All\n </Button>\n\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Paper>\n <FieldCaption>\n You can customise the permissions\n that the users related to this\n role can perform in the entities\n of each collection\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12 md:col-span-4\"}>\n <Select\n error={touched.config && Boolean(errors.config)}\n size={\"large\"}\n fullWidth={true}\n id=\"createCollections\"\n name=\"createCollections\"\n label=\"Create collections\"\n position={\"item-aligned\"}\n disabled={isAdmin || !editable}\n onChange={(event) => setFieldValue(\"config.createCollections\", event.target.value === \"true\")}\n value={isAdmin || values.config?.createCollections ? \"true\" : \"false\"}\n renderValue={(value: any) => value === \"true\" ? \"Yes\" : \"No\"}\n >\n <SelectItem\n value={\"true\"}> Yes </SelectItem>\n <SelectItem\n value={\"false\"}> No </SelectItem>\n </Select>\n\n <FieldCaption>\n {touched.config && Boolean(errors.config) ? errors.config : \"Can the user create collections\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12 md:col-span-4\"}>\n <Select\n size={\"large\"}\n fullWidth={true}\n error={touched.config && Boolean(errors.config)}\n id=\"editCollections\"\n name=\"editCollections\"\n label=\"Edit collections\"\n disabled={isAdmin || !editable}\n position={\"item-aligned\"}\n onChange={(event) => setFieldValue(\"config.editCollections\", event.target.value === \"own\" ? \"own\" : event.target.value === \"true\")}\n value={isAdmin ? \"true\" : (values.config?.editCollections === \"own\" ? \"own\" : (values.config?.editCollections ? \"true\" : \"false\"))}\n renderValue={(value: any) => value === \"own\" ? \"Own\" : (value === \"true\" ? \"Yes\" : \"No\")}\n >\n <SelectItem\n value={\"true\"}> Yes </SelectItem>\n <SelectItem\n value={\"false\"}> No </SelectItem>\n <SelectItem\n value={\"own\"}> Only\n his/her own </SelectItem>\n </Select>\n\n <FieldCaption>\n {touched.config && Boolean(errors.config) ? errors.config : \"Can the user edit collections\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12 md:col-span-4\"}>\n <Select\n size={\"large\"}\n fullWidth={true}\n error={touched.config && Boolean(errors.config)}\n id=\"deleteCollections\"\n name=\"deleteCollections\"\n label=\"Delete collections\"\n disabled={isAdmin || !editable}\n position={\"item-aligned\"}\n onChange={(event) => setFieldValue(\"config.deleteCollections\", event.target.value === \"own\" ? \"own\" : event.target.value === \"true\")}\n value={isAdmin ? \"true\" : (values.config?.deleteCollections === \"own\" ? \"own\" : (values.config?.deleteCollections ? \"true\" : \"false\"))}\n renderValue={(value: any) => value === \"own\" ? \"Own\" : (value === \"true\" ? \"Yes\" : \"No\")}\n >\n <SelectItem\n value={\"true\"}> Yes </SelectItem>\n <SelectItem\n value={\"false\"}> No </SelectItem>\n <SelectItem\n value={\"own\"}> Only\n his/her own </SelectItem>\n </Select>\n\n <FieldCaption>\n {touched.config && Boolean(errors.config) ? errors.config : \"Can the user delete collections\"}\n </FieldCaption>\n\n </div>\n\n </div>\n </DialogContent>\n\n <DialogActions position={\"sticky\"}>\n {savingError && <Typography className={\"text-red-500 dark:text-red-500\"}>\n {savingError.message ?? \"There was an error saving this role\"}\n </Typography>}\n <Button variant={\"text\"}\n onClick={() => {\n handleClose();\n }}>\n Cancel\n </Button>\n <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n disabled={!dirty}\n loading={isSubmitting}\n startIcon={<CheckIcon/>}\n >\n {isNewRole ? \"Create role\" : \"Update\"}\n </LoadingButton>\n </DialogActions>\n </form>\n\n </Formex>\n </Dialog>\n );\n}\n","import { Role } from \"@firecms/core\";\n\nexport const DEFAULT_ROLES: Role[] = [\n {\n id: \"admin\",\n name: \"Admin\",\n isAdmin: true\n },\n {\n id: \"editor\",\n name: \"Editor\",\n isAdmin: false,\n defaultPermissions: {\n read: true,\n create: true,\n edit: true,\n delete: true\n },\n config: {\n createCollections: true,\n editCollections: \"own\",\n deleteCollections: \"own\"\n }\n },\n {\n id: \"viewer\",\n name: \"Viewer\",\n isAdmin: false,\n defaultPermissions: {\n read: true,\n create: false,\n edit: false,\n delete: false\n }\n }\n];\n","import { useState } from \"react\";\nimport {\n Button,\n CenteredView,\n Checkbox,\n DeleteIcon,\n IconButton,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n Tooltip,\n Typography\n} from \"@firecms/ui\";\nimport { ConfirmationDialog, Role } from \"@firecms/core\";\nimport { useUserManagement } from \"../../hooks\";\nimport { RoleChip } from \"./RoleChip\";\nimport { DEFAULT_ROLES } from \"./default_roles\";\n\nexport function RolesTable({\n onRoleClicked,\n editable\n }: {\n onRoleClicked: (role: Role) => void;\n editable: boolean;\n}) {\n\n const {\n roles,\n saveRole,\n deleteRole,\n allowDefaultRolesCreation\n } = useUserManagement();\n\n const [roleToBeDeleted, setRoleToBeDeleted] = useState<Role | undefined>(undefined);\n const [deleteInProgress, setDeleteInProgress] = useState<boolean>(false);\n\n return <div\n className=\"w-full overflow-auto\">\n <Table className={\"w-full\"}>\n <TableHeader>\n <TableCell header={true} className=\"w-16\"></TableCell>\n <TableCell header={true}>Role</TableCell>\n <TableCell header={true} className={\"items-center\"}>Is Admin</TableCell>\n <TableCell header={true}>Default permissions</TableCell>\n </TableHeader>\n\n <TableBody>\n {roles && roles.map((role) => {\n const canCreateAll = role.isAdmin || role.defaultPermissions?.create;\n const canReadAll = role.isAdmin || role.defaultPermissions?.read;\n const canUpdateAll = role.isAdmin || role.defaultPermissions?.edit;\n const canDeleteAll = role.isAdmin || role.defaultPermissions?.delete;\n return (\n <TableRow\n key={role.name}\n onClick={() => {\n onRoleClicked(role);\n }}\n >\n <TableCell style={{ width: \"64px\" }}>\n {!role.isAdmin &&\n <Tooltip\n asChild={true}\n title={\"Delete this role\"}>\n <IconButton\n size={\"small\"}\n disabled={!editable}\n onClick={(event) => {\n event.stopPropagation();\n return setRoleToBeDeleted(role);\n }}>\n <DeleteIcon/>\n </IconButton>\n </Tooltip>}\n </TableCell>\n <TableCell>\n <RoleChip role={role}/>\n </TableCell>\n <TableCell className={\"items-center\"}>\n <Checkbox checked={role.isAdmin ?? false}/>\n </TableCell>\n <TableCell>\n <ul>\n {canCreateAll && <li>Create</li>}\n {canReadAll && <li>Read</li>}\n {canUpdateAll && <li>Update</li>}\n {canDeleteAll && <li>Delete</li>}\n </ul>\n </TableCell>\n </TableRow>\n );\n })}\n\n {(!roles || roles.length === 0) && <TableRow>\n <TableCell colspan={4}>\n <CenteredView className={\"flex flex-col gap-4 my-8 items-center\"}>\n <Typography variant={\"label\"}>\n You don&apos;t have any roles yet.\n </Typography>\n {allowDefaultRolesCreation && <Button variant={\"outlined\"}\n onClick={() => {\n DEFAULT_ROLES.forEach((role) => {\n saveRole(role);\n });\n }}>\n Create default roles\n </Button>}\n </CenteredView>\n </TableCell>\n </TableRow>}\n\n </TableBody>\n\n </Table>\n\n <ConfirmationDialog\n open={Boolean(roleToBeDeleted)}\n loading={deleteInProgress}\n onAccept={() => {\n if (roleToBeDeleted) {\n setDeleteInProgress(true);\n deleteRole(roleToBeDeleted)\n .then(() => {\n setRoleToBeDeleted(undefined);\n })\n .finally(() => {\n setDeleteInProgress(false);\n })\n }\n }}\n onCancel={() => {\n setRoleToBeDeleted(undefined);\n }}\n title={<>Delete?</>}\n body={<>Are you sure you want to delete this role?</>}/>\n\n </div>;\n}\n","import React, { useCallback, useState } from \"react\";\n\nimport { Role, useNavigationController } from \"@firecms/core\";\nimport { AddIcon, Button, Container, Typography } from \"@firecms/ui\";\nimport { RolesTable } from \"./RolesTable\";\nimport { RolesDetailsForm } from \"./RolesDetailsForm\";\n\nexport const RolesView = React.memo(\n function RolesView({ children }: { children?: React.ReactNode }) {\n\n const { collections } = useNavigationController();\n const [dialogOpen, setDialogOpen] = useState(false);\n const [selectedRole, setSelectedRole] = useState<Role | undefined>();\n\n const onRoleClicked = useCallback((user: Role) => {\n setDialogOpen(true);\n setSelectedRole(user);\n }, []);\n\n const handleClose = () => {\n setSelectedRole(undefined);\n setDialogOpen(false);\n };\n\n return (\n <Container className=\"w-full flex flex-col py-4 gap-4\" maxWidth={\"6xl\"}>\n\n {children}\n\n <div className=\"flex items-center mt-12\">\n <Typography gutterBottom variant=\"h4\"\n className=\"flex-grow\"\n component=\"h4\">\n Roles\n </Typography>\n <Button\n size={\"large\"}\n startIcon={<AddIcon/>}\n onClick={() => setDialogOpen(true)}>\n Add role\n </Button>\n </div>\n\n <RolesTable onRoleClicked={onRoleClicked} editable={true}/>\n\n <RolesDetailsForm\n key={selectedRole?.id ?? \"new\"}\n open={dialogOpen}\n role={selectedRole}\n editable={true}\n collections={collections}\n handleClose={handleClose}/>\n\n </Container>\n )\n });\n","import React, { useCallback } from \"react\";\nimport * as Yup from \"yup\";\nimport {\n Button,\n CheckIcon,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n LoadingButton,\n MultiSelect,\n MultiSelectItem,\n TextField,\n} from \"@firecms/ui\";\nimport { FieldCaption, Role, useAuthController, User, useSnackbarController } from \"@firecms/core\";\nimport { Formex, useCreateFormex } from \"@firecms/formex\";\n\nimport { areRolesEqual } from \"../../utils\";\nimport { useUserManagement } from \"../../hooks\";\nimport { RoleChip } from \"../roles\";\n\nexport const UserYupSchema = Yup.object().shape({\n displayName: Yup.string().required(\"Required\"),\n email: Yup.string().email().required(\"Required\"),\n roles: Yup.array().min(1)\n});\n\nfunction canUserBeEdited(loggedUser: User, user: User, users: User[], roles: Role[], prevUser?: User) {\n const admins = users.filter(u => u.roles?.map(r => r.id).includes(\"admin\"));\n const loggedUserIsAdmin = loggedUser.roles?.map(r => r.id).includes(\"admin\");\n const didRolesChange = !prevUser || !areRolesEqual(prevUser.roles ?? [], user.roles ?? []);\n\n if (didRolesChange && !loggedUserIsAdmin) {\n throw new Error(\"Only admins can change roles\");\n }\n\n // was the admin role removed\n const adminRoleRemoved = prevUser && prevUser.roles?.map(r => r.id).includes(\"admin\") && !user.roles?.map(r => r.id).includes(\"admin\");\n\n // avoid removing the last admin\n if (adminRoleRemoved && admins.length === 1) {\n throw new Error(\"There must be at least one admin\");\n }\n return true;\n}\n\nexport function UserDetailsForm({\n open,\n user: userProp,\n handleClose\n }: {\n open: boolean,\n user?: User,\n handleClose: () => void\n}) {\n\n const snackbarController = useSnackbarController();\n const {\n user: loggedInUser\n } = useAuthController();\n const {\n saveUser,\n users,\n roles,\n } = useUserManagement();\n const isNewUser = !userProp;\n\n const onUserUpdated = useCallback((savedUser: User): Promise<User> => {\n if (!loggedInUser) {\n throw new Error(\"Logged user not found\");\n }\n try {\n canUserBeEdited(loggedInUser, savedUser, users, roles, userProp);\n return saveUser(savedUser);\n } catch (e: any) {\n return Promise.reject(e);\n }\n }, [roles, saveUser, userProp, users, loggedInUser]);\n\n const formex = useCreateFormex({\n initialValues: userProp ?? {\n displayName: \"\",\n email: \"\",\n roles: roles.filter(r => r.id === \"editor\")\n } as User,\n validation: (values) => {\n return UserYupSchema.validate(values, { abortEarly: false })\n .then(() => {\n return {};\n }).catch((e) => {\n return e.inner.reduce((acc: any, error: any) => {\n acc[error.path] = error.message;\n return acc;\n }, {});\n });\n },\n onSubmit: (user: User, formexController) => {\n\n return onUserUpdated(user)\n .then(() => {\n handleClose();\n formexController.resetForm({\n values: user\n });\n }).catch((e) => {\n snackbarController.open({\n type: \"error\",\n message: e.message\n });\n });\n }\n });\n\n const {\n isSubmitting,\n touched,\n handleChange,\n values,\n errors,\n setFieldValue,\n dirty,\n handleSubmit,\n submitCount\n } = formex;\n\n return (\n <Dialog\n open={open}\n onOpenChange={(open) => !open ? handleClose() : undefined}\n maxWidth={\"4xl\"}\n >\n <Formex value={formex}>\n <form\n onSubmit={handleSubmit}\n autoComplete={\"off\"}\n noValidate\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n position: \"relative\",\n height: \"100%\"\n }}>\n\n <DialogTitle variant={\"h4\"} gutterBottom={false}>\n User\n </DialogTitle>\n <DialogContent className=\"h-full flex-grow\">\n\n <div className={\"grid grid-cols-12 gap-8\"}>\n\n <div className={\"col-span-12\"}>\n <TextField\n name=\"displayName\"\n required\n error={submitCount > 0 && Boolean(errors.displayName)}\n value={values.displayName ?? \"\"}\n onChange={handleChange}\n aria-describedby=\"name-helper-text\"\n label=\"Name\"\n />\n <FieldCaption>\n {submitCount > 0 && Boolean(errors.displayName) ? errors.displayName : \"Name of this user\"}\n </FieldCaption>\n </div>\n <div className={\"col-span-12\"}>\n <TextField\n required\n error={submitCount > 0 && Boolean(errors.email)}\n name=\"email\"\n value={values.email ?? \"\"}\n onChange={handleChange}\n aria-describedby=\"email-helper-text\"\n label=\"Email\"\n />\n <FieldCaption>\n {submitCount > 0 && Boolean(errors.email) ? errors.email : \"Email of this user\"}\n </FieldCaption>\n </div>\n <div className={\"col-span-12\"}>\n <MultiSelect\n className={\"w-full\"}\n label=\"Roles\"\n value={values.roles?.map(r => r.id) ?? []}\n onValueChange={(value: string[]) => setFieldValue(\"roles\", value.map(id => roles.find(r => r.id === id) as Role))}\n // renderValue={(value: string) => {\n // const userRole = roles\n // .find((role) => role.id === value);\n // if (!userRole) return null;\n // return <div className=\"flex flex-wrap space-x-2 space-y-2\">\n // <RoleChip key={userRole?.id} role={userRole}/>\n // </div>;\n // }}\n >\n {roles.map(userRole => <MultiSelectItem key={userRole.id}\n value={userRole.id}>\n <RoleChip key={userRole?.id} role={userRole}/>\n </MultiSelectItem>)}\n </MultiSelect>\n </div>\n\n </div>\n\n </DialogContent>\n\n <DialogActions>\n\n <Button variant={\"text\"}\n onClick={() => {\n handleClose();\n }}>\n Cancel\n </Button>\n\n <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n disabled={!dirty}\n loading={isSubmitting}\n startIcon={<CheckIcon/>}\n >\n {isNewUser ? \"Create user\" : \"Update\"}\n </LoadingButton>\n </DialogActions>\n </form>\n </Formex>\n\n </Dialog>\n );\n}\n","import { useState } from \"react\";\n\nimport { format } from \"date-fns\";\nimport * as locales from \"date-fns/locale\";\n\nimport {\n defaultDateFormat,\n ConfirmationDialog, Role,\n useAuthController,\n useCustomizationController, User,\n useSnackbarController\n} from \"@firecms/core\";\nimport {\n Button,\n CenteredView,\n DeleteIcon,\n IconButton,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n Tooltip,\n Typography,\n} from \"@firecms/ui\";\nimport { useUserManagement } from \"../../hooks\";\nimport { RoleChip } from \"../roles\";\nimport { PersistedUser } from \"../../types\";\n\nexport function UsersTable({ onUserClicked }: {\n onUserClicked: (user: User) => void;\n}) {\n\n const {\n users,\n saveUser,\n deleteUser\n } = useUserManagement<PersistedUser>();\n\n const authController = useAuthController();\n const snackbarController = useSnackbarController();\n\n const customizationController = useCustomizationController();\n const dateUtilsLocale = customizationController?.locale ? locales[customizationController?.locale as keyof typeof locales] : undefined;\n const dateFormat: string = customizationController?.dateTimeFormat ?? defaultDateFormat;\n\n const [userToBeDeleted, setUserToBeDeleted] = useState<User | undefined>(undefined);\n const [deleteInProgress, setDeleteInProgress] = useState<boolean>(false);\n\n return (\n <div className=\"overflow-auto\">\n\n <Table className={\"w-full\"}>\n\n <TableHeader>\n <TableCell className=\"truncate w-16\"></TableCell>\n <TableCell>Email</TableCell>\n <TableCell>Name</TableCell>\n <TableCell>Roles</TableCell>\n <TableCell>Created on</TableCell>\n </TableHeader>\n <TableBody>\n {users && users.map((user) => {\n\n const userRoles: Role[] | undefined = user.roles;\n\n const formattedDate = user.created_on ? format(user.created_on, dateFormat, { locale: dateUtilsLocale }) : \"\";\n\n return (\n <TableRow\n key={\"row_\" + user.uid}\n onClick={() => {\n onUserClicked(user);\n }}\n >\n <TableCell className={\"w-10\"}>\n <Tooltip\n asChild={true}\n title={\"Delete this user\"}>\n <IconButton\n size={\"small\"}\n onClick={(event) => {\n event.stopPropagation();\n return setUserToBeDeleted(user);\n }}>\n <DeleteIcon/>\n </IconButton>\n </Tooltip>\n </TableCell>\n <TableCell>{user.email}</TableCell>\n <TableCell className={\"font-medium align-left\"}>{user.displayName}</TableCell>\n <TableCell className=\"align-left\">\n {userRoles\n ? <div className=\"flex flex-wrap gap-2\">\n {userRoles.map(userRole =>\n <RoleChip key={userRole?.id} role={userRole}/>\n )}\n </div>\n : null}\n </TableCell>\n <TableCell>{formattedDate}</TableCell>\n </TableRow>\n );\n })}\n\n {(!users || users.length === 0) && <TableRow>\n <TableCell colspan={6}>\n <CenteredView className={\"flex flex-col gap-4 my-8 items-center\"}>\n <Typography variant={\"label\"}>\n There are no users yet\n </Typography>\n <Button variant={\"outlined\"}\n onClick={() => {\n if (!authController.user?.uid) {\n throw Error(\"UsersTable, authController misconfiguration\");\n }\n saveUser({\n uid: authController.user?.uid,\n email: authController.user?.email,\n displayName: authController.user?.displayName,\n photoURL: authController.user?.photoURL,\n providerId: authController.user?.providerId,\n isAnonymous: authController.user?.isAnonymous,\n roles: [{ id: \"admin\", name: \"Admin\" }],\n created_on: new Date()\n })\n .then(() => {\n snackbarController.open({\n type: \"success\",\n message: \"User added successfully\"\n })\n })\n .catch((error) => {\n snackbarController.open({\n type: \"error\",\n message: \"Error adding user: \" + error.message,\n })\n });\n }}>\n\n Add the logged user as an admin\n </Button>\n </CenteredView>\n </TableCell>\n </TableRow>}\n\n </TableBody>\n </Table>\n\n <ConfirmationDialog\n open={Boolean(userToBeDeleted)}\n loading={deleteInProgress}\n onAccept={() => {\n if (userToBeDeleted) {\n setDeleteInProgress(true);\n deleteUser(userToBeDeleted)\n .then(() => {\n setUserToBeDeleted(undefined);\n })\n .catch((error) => {\n snackbarController.open({\n type: \"error\",\n message: \"Error deleting user: \" + error.message,\n })\n })\n .finally(() => {\n setDeleteInProgress(false);\n })\n }\n }}\n onCancel={() => {\n setUserToBeDeleted(undefined);\n }}\n title={<>Delete?</>}\n body={<>Are you sure you want to delete this user?</>}/>\n </div>);\n}\n","import { AddIcon, Button, Container, Typography } from \"@firecms/ui\";\n\nimport { UsersTable } from \"./UsersTable\";\nimport { UserDetailsForm } from \"./UserDetailsForm\";\nimport React, { useCallback, useState } from \"react\";\nimport { useUserManagement } from \"../../hooks/useUserManagement\";\nimport { User } from \"@firecms/core\";\n\nexport const UsersView = function UsersView({ children }: { children?: React.ReactNode }) {\n\n const [dialogOpen, setDialogOpen] = useState<boolean>();\n const [selectedUser, setSelectedUser] = useState<User | undefined>();\n\n const { users } = useUserManagement();\n\n const onUserClicked = useCallback((user: User) => {\n setSelectedUser(user);\n setDialogOpen(true);\n }, []);\n\n const handleClose = useCallback(() => {\n setDialogOpen(false);\n setSelectedUser(undefined);\n }, []);\n\n return (\n <Container className=\"w-full flex flex-col py-4 gap-4\" maxWidth={\"6xl\"}>\n\n {children}\n\n <div\n className=\"flex items-center mt-12\">\n <Typography gutterBottom variant=\"h4\"\n className=\"flex-grow\"\n component=\"h4\">\n Users\n </Typography>\n <Button\n size={\"large\"}\n startIcon={<AddIcon/>}\n onClick={() => setDialogOpen(true)}>\n Add user\n </Button>\n </div>\n\n <UsersTable onUserClicked={onUserClicked}/>\n\n <UserDetailsForm\n key={selectedUser?.uid ?? \"new\"}\n open={dialogOpen ?? false}\n user={selectedUser}\n handleClose={handleClose}/>\n\n </Container>\n )\n};\n","import { FireCMSPlugin, useAuthController, User, useSnackbarController } from \"@firecms/core\";\nimport { UserManagementProvider } from \"./UserManagementProvider\";\nimport { UserManagement } from \"./types\";\nimport { AddIcon, Button, Paper, Typography } from \"@firecms/ui\";\nimport { DEFAULT_ROLES } from \"./components/roles/default_roles\";\n\nexport function useUserManagementPlugin<USER extends User = any>({ userManagement }: {\n userManagement: UserManagement<USER>,\n}): FireCMSPlugin {\n\n const noUsers = userManagement.users.length === 0;\n const noRoles = userManagement.roles.length === 0;\n\n return {\n key: \"user_management\",\n loading: userManagement.loading,\n\n homePage: {\n additionalChildrenStart: noUsers || noRoles\n ? <IntroWidget\n noUsers={noUsers}\n noRoles={noRoles}\n userManagement={userManagement}/>\n : undefined\n },\n provider: {\n Component: UserManagementProvider,\n props: {\n userManagement\n }\n }\n }\n}\n\nexport function IntroWidget({\n noUsers,\n noRoles,\n userManagement\n }: {\n noUsers: boolean;\n noRoles: boolean;\n userManagement: UserManagement<any>;\n}) {\n\n const authController = useAuthController();\n const snackbarController = useSnackbarController();\n\n const buttonLabel = noUsers && noRoles\n ? \"Create default roles and add current user as admin\"\n : noUsers\n ? \"Add current user as admin\"\n : noRoles ? \"Create default roles\" : undefined;\n\n return (\n <Paper\n className={\"my-4 flex flex-col px-4 py-6 bg-white dark:bg-surface-accent-800 gap-2\"}>\n <Typography variant={\"subtitle2\"} className={\"uppercase\"}>Create your users and roles</Typography>\n <Typography>\n You have no users or roles defined. You can create default roles and add the current user as admin.\n </Typography>\n <Button onClick={() => {\n if (!authController.user?.uid) {\n throw Error(\"UsersTable, authController misconfiguration\");\n }\n if (noUsers) {\n userManagement.saveUser({\n uid: authController.user?.uid,\n email: authController.user?.email,\n displayName: authController.user?.displayName,\n photoURL: authController.user?.photoURL,\n providerId: authController.user?.providerId,\n isAnonymous: authController.user?.isAnonymous,\n roles: [{\n id: \"admin\",\n name: \"Admin\"\n }],\n created_on: new Date()\n })\n .then(() => {\n snackbarController.open({\n type: \"success\",\n message: \"User added successfully\"\n })\n })\n .catch((error) => {\n snackbarController.open({\n type: \"error\",\n message: \"Error adding user: \" + error.message\n })\n });\n }\n if (noRoles) {\n DEFAULT_ROLES.forEach((role) => {\n userManagement.saveRole(role);\n });\n }\n }}>\n <AddIcon/>\n {buttonLabel}\n </Button>\n </Paper>\n );\n\n}\n","import { CMSView } from \"@firecms/core\";\nimport { RolesView, UsersView } from \"./components\";\n\nexport const userManagementAdminViews: CMSView[] = [\n {\n path: \"users\",\n name: \"CMS Users\",\n group: \"Admin\",\n icon: \"face\",\n view: <UsersView/>\n },\n {\n path: \"roles\",\n name: \"Roles\",\n group: \"Admin\",\n icon: \"gpp_good\",\n view: <RolesView/>\n }\n]\n"],"names":["RESERVED_GROUPS","DEFAULT_PERMISSIONS","read","edit","create","delete","resolveUserRolePermissions","collection","user","roles","ownerId","uid","basePermissions","map","role","resolveCollectionRole","id","reduce","mergePermissions","isAdmin","defaultPermissions","thisCollectionPermissions","collectionPermissions","permA","permB","getUserRoles","fireCMSUser","undefined","find","r","filter","Boolean","areRolesEqual","rolesA","rolesB","rolesAIds","rolesBIds","length","every","includes","cacheDelegatedLoginToken","projectId","delegatedToken","data","parseJwt","expiry","Date","exp","localStorage","setItem","JSON","stringify","token","getDelegatedLoginTokenFromCache","entry","getItem","parse","clearDelegatedLoginTokensCache","i","key","startsWith","removeItem","Error","base64Url","split","base64","replace","jsonPayload","decodeURIComponent","window","atob","c","charCodeAt","toString","slice","join","darkenColor","hexColor","darkenBy","test","color","substring","parseInt","g","b","Math","floor","hexToRgbaWithOpacity","opacity","alpha","useBuildUserManagement","authController","dataSourceDelegate","usersPath","rolesPath","allowDefaultRolesCreation","includeCollectionConfigPermissions","rolesLoading","setRolesLoading","React","useState","usersLoading","setUsersLoading","setRoles","usersWithRoleIds","setUsersWithRoleIds","users","u","rolesError","setRolesError","usersError","setUsersError","_usersLoading","_rolesLoading","loading","useEffect","initialised","initialLoading","listenCollection","path","onUpdate","entities","newRoles","entityToRoles","equal","e","error","onError","debug","newUsers","entitiesToUsers","saveUser","useCallback","roleIds","email","toLowerCase","trim","userExists","created_on","saveEntity","status","entityId","values","removeUndefined","then","saveRole","roleData","deleteUser","entity","deleteEntity","deleteRole","defineRolesFor","mgmtUser","authenticator","console","warn","userRoles","some","userRoleIds","setUserRoles","docs","doc","newVar","updated_on","UserManagementContext","createContext","UserManagementProvider","t0","$","_c","children","userManagement","t1","useUserManagement","useContext","RoleChip","colorScheme","getColorSchemeForSeed","name","Chip","RoleYupSchema","Yup","object","shape","string","required","canRoleBeEdited","loggedUser","loggedUserIsAdmin","RolesDetailsForm","open","editable","handleClose","collections","isNewRole","loggedInUser","useAuthController","savingError","setSavingError","role_0","onRoleUpdated","t2","t3","role_1","formexController","resetForm","catch","e_0","t4","Promise","resolve","initialValues","onSubmit","validation","_temp3","formex","useCreateFormex","isSubmitting","touched","values_0","errors","errors_0","handleChange","setFieldValue","dirty","setFieldTouched","defaultCreate","defaultRead","defaultEdit","defaultDelete","t5","idTouched","getIn","toSnakeCase","t6","t7","t8","Symbol","for","display","flexDirection","position","height","DialogTitle","t9","t10","t11","TextField","t12","t13","jsx","FieldCaption","t14","jsxs","t15","t16","t17","e_2","t18","t19","t20","t21","t22","TableHeader","TableCell","t23","t24","t25","t26","checked","t27","Tooltip","Checkbox","t28","t29","t30","checked_0","t31","t32","t33","t34","checked_1","t35","t36","t37","t38","checked_2","t39","t40","t41","TableRow","t42","col","checked_3","checked_4","checked_5","checked_6","Button","t43","Paper","Table","TableBody","t44","t45","t46","config","t47","t48","event","target","value","t49","createCollections","t50","t51","SelectItem","t52","Select","_temp4","t53","t54","t55","t56","t57","t58","event_0","t59","editCollections","t60","t61","t62","t63","_temp5","t64","t65","t66","t67","t68","t69","event_1","t70","deleteCollections","t71","t72","t73","t74","_temp6","t75","t76","t77","t78","DialogContent","t79","Typography","message","t80","t81","t82","CheckIcon","t83","t84","LoadingButton","t85","DialogActions","t86","handleSubmit","t87","Formex","t88","Dialog","value_1","value_0","validate","abortEarly","_temp","_temp2","e_1","inner","forEach","DEFAULT_ROLES","RolesTable","onRoleClicked","roleToBeDeleted","setRoleToBeDeleted","deleteInProgress","setDeleteInProgress","canCreateAll","canReadAll","canUpdateAll","canDeleteAll","width","IconButton","stopPropagation","DeleteIcon","CenteredView","finally","ConfirmationDialog","RolesView","memo","useNavigationController","dialogOpen","setDialogOpen","selectedRole","setSelectedRole","AddIcon","Container","UserYupSchema","displayName","array","min","canUserBeEdited","prevUser","admins","didRolesChange","adminRoleRemoved","UserDetailsForm","userProp","snackbarController","useSnackbarController","isNewUser","savedUser","reject","onUserUpdated","type","submitCount","open_0","r_1","_temp7","MultiSelect","userRole","MultiSelectItem","r_0","acc","UsersTable","onUserClicked","customizationController","useCustomizationController","dateUtilsLocale","locale","locales","dateFormat","dateTimeFormat","defaultDateFormat","userToBeDeleted","setUserToBeDeleted","formattedDate","format","photoURL","providerId","isAnonymous","error_0","UsersView","selectedUser","setSelectedUser","useUserManagementPlugin","noUsers","noRoles","additionalChildrenStart","Component","props","homePage","provider","IntroWidget","buttonLabel","userManagementAdminViews","group","icon","view"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.js","sources":["../src/utils/permissions.ts","../src/utils/local_storage.ts","../src/utils/colors.ts","../src/hooks/useBuildUserManagement.tsx","../src/UserManagementProvider.tsx","../src/hooks/useUserManagement.tsx","../src/components/roles/RoleChip.tsx","../src/components/roles/RolesDetailsForm.tsx","../src/components/roles/default_roles.tsx","../src/components/roles/RolesTable.tsx","../src/components/roles/RolesView.tsx","../src/components/users/UserDetailsForm.tsx","../src/components/users/UsersTable.tsx","../src/components/users/UsersView.tsx","../src/useUserManagementPlugin.tsx","../src/admin_views.tsx"],"sourcesContent":["import { EntityCollection, Permissions, Role, User } from \"@firecms/core\";\n\nexport const RESERVED_GROUPS = [\"Admin\"];\n\nconst DEFAULT_PERMISSIONS = {\n read: false,\n edit: false,\n create: false,\n delete: false\n};\n\nexport function resolveUserRolePermissions<USER extends User>\n({\n collection,\n user\n }: {\n collection: EntityCollection<any>,\n user: USER | null\n}): Permissions {\n\n const roles = user?.roles;\n if (!roles) {\n return DEFAULT_PERMISSIONS;\n } else if (collection.ownerId === user?.uid) {\n return {\n read: true,\n create: true,\n edit: true,\n delete: true\n };\n } else {\n const basePermissions = {\n read: false,\n create: false,\n edit: false,\n delete: false\n };\n\n return roles\n .map(role => resolveCollectionRole(role, collection.id))\n .reduce(mergePermissions, basePermissions);\n }\n}\n\nfunction resolveCollectionRole(role: Role, id: string): Permissions {\n\n const basePermissions = {\n read: (role.isAdmin || role.defaultPermissions?.read) ?? false,\n create: (role.isAdmin || role.defaultPermissions?.create) ?? false,\n edit: (role.isAdmin || role.defaultPermissions?.edit) ?? false,\n delete: (role.isAdmin || role.defaultPermissions?.delete) ?? false\n };\n const thisCollectionPermissions = role.collectionPermissions?.[id];\n if (thisCollectionPermissions) {\n return mergePermissions(thisCollectionPermissions, basePermissions);\n } else if (role.defaultPermissions) {\n return mergePermissions(role.defaultPermissions, basePermissions);\n } else {\n return basePermissions;\n }\n}\n\nconst mergePermissions = (permA: Permissions, permB: Permissions) => {\n return {\n read: permA.read || permB.read,\n create: permA.create || permB.create,\n edit: permA.edit || permB.edit,\n delete: permA.delete || permB.delete\n };\n}\n\nexport function getUserRoles(roles: Role[], fireCMSUser: User): Role[] | undefined {\n return !roles\n ? undefined\n : (fireCMSUser.roles\n ? fireCMSUser.roles\n .map(role => roles.find((r) => r.id === role.id))\n .filter(Boolean) as Role[]\n : []);\n}\n\nexport const areRolesEqual = (rolesA: Role[], rolesB: Role[]) => {\n const rolesAIds = rolesA.map(r => r.id);\n const rolesBIds = rolesB.map(r => r.id);\n return rolesAIds.length === rolesB.length && rolesAIds.every((role) => rolesBIds.includes(role));\n}\n","// const tokens = new Map<string, {\n// token: string,\n// expiry: Date\n// }>();\n\nexport function cacheDelegatedLoginToken(projectId: string, delegatedToken?: string) {\n if (!delegatedToken) {\n return;\n }\n\n const data = parseJwt(delegatedToken);\n // @ts-ignore\n const expiry = new Date(data.exp * 1000);\n localStorage.setItem(`auth_token::${projectId}`, JSON.stringify({\n token: delegatedToken,\n expiry\n }));\n\n}\n\nexport function getDelegatedLoginTokenFromCache(projectId: string) {\n const entry = localStorage.getItem(`auth_token::${projectId}`);\n if (entry) {\n const data = JSON.parse(entry);\n data.expiry = new Date(data.expiry);\n if (data.expiry > new Date()) {\n return data.token;\n }\n }\n return undefined;\n}\n\nexport function clearDelegatedLoginTokensCache() {\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(\"auth_token::\")) {\n localStorage.removeItem(key);\n }\n }\n}\n\nfunction parseJwt(token?: string): object {\n if (!token) {\n throw new Error(\"No JWT token\");\n }\n const base64Url = token.split(\".\")[1];\n const base64 = base64Url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const jsonPayload = decodeURIComponent(window.atob(base64).split(\"\").map(function (c) {\n return \"%\" + (\"00\" + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(\"\"));\n\n return JSON.parse(jsonPayload);\n}\n","export function darkenColor(hexColor: string, darkenBy = 10): string {\n // Check input validity\n if (!/^#([0-9A-Fa-f]{3}){1,2}$/.test(hexColor)) {\n throw new Error(\"Invalid color format\");\n }\n\n // If shorthand form, convert to full form\n let color = hexColor.substring(1).split(\"\");\n if (color.length === 3) {\n color = [color[0], color[0], color[1], color[1], color[2], color[2]];\n }\n\n // Convert to RGB values\n let r = parseInt(color[0] + color[1], 16);\n let g = parseInt(color[2] + color[3], 16);\n let b = parseInt(color[4] + color[5], 16);\n\n // Reduce each color component by the specified percentage (darkenBy)\n r = Math.floor(r * (1 - darkenBy / 100));\n g = Math.floor(g * (1 - darkenBy / 100));\n b = Math.floor(b * (1 - darkenBy / 100));\n\n // Recombine into hex and return\n return \"#\" +\n (r < 16 ? \"0\" : \"\") + r.toString(16) +\n (g < 16 ? \"0\" : \"\") + g.toString(16) +\n (b < 16 ? \"0\" : \"\") + b.toString(16);\n}\n\nexport function hexToRgbaWithOpacity(hexColor: string, opacity = 10): string {\n // Check input validity\n if (!/^#([0-9A-Fa-f]{3}){1,2}$/.test(hexColor)) {\n throw new Error(\"Invalid color format\");\n }\n\n // If shorthand form, convert to full form\n let color = hexColor.substring(1).split(\"\");\n if (color.length === 3) {\n color = [color[0], color[0], color[1], color[1], color[2], color[2]];\n }\n\n // Convert to RGB values\n const r = parseInt(color[0] + color[1], 16);\n const g = parseInt(color[2] + color[3], 16);\n const b = parseInt(color[4] + color[5], 16);\n\n // Convert opacity to a decimal for CSS\n const alpha = opacity / 100;\n\n // Construct and return the RGBA color\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n","import React, { useCallback, useEffect } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { UserManagement } from \"../types\";\nimport {\n AuthController,\n Authenticator,\n DataSourceDelegate,\n Entity,\n PermissionsBuilder,\n removeUndefined,\n Role,\n User\n} from \"@firecms/core\";\nimport { resolveUserRolePermissions } from \"../utils\";\n\ntype UserWithRoleIds<USER extends User = any> = Omit<USER, \"roles\"> & { roles: string[] };\n\nexport interface UserManagementParams<CONTROLLER extends AuthController<any> = AuthController<any>> {\n\n authController: CONTROLLER;\n\n /**\n * The delegate in charge of persisting the data.\n */\n dataSourceDelegate?: DataSourceDelegate;\n\n /**\n * Path where the plugin users configuration is stored.\n * Default: __FIRECMS/config/users\n * You can specify a different path if you want to store the user management configuration in a different place.\n * Please keep in mind that the FireCMS users are not necessarily the same as the Firebase users (but they can be).\n * The path should be relative to the root of the database, and should always have an odd number of segments.\n */\n usersPath?: string;\n\n /**\n * Path where the plugin roles configuration is stored.\n * Default: __FIRECMS/config/roles\n */\n rolesPath?: string;\n\n /**\n * If there are no roles in the database, provide a button to create the default roles.\n */\n allowDefaultRolesCreation?: boolean;\n\n /**\n * Include the collection config permissions in the user management system.\n */\n includeCollectionConfigPermissions?: boolean;\n\n}\n\n/**\n * This hook is used to build a user management object that can be used to\n * manage users and roles in a Firestore backend.\n * @param authController\n * @param dataSourceDelegate\n * @param usersPath\n * @param rolesPath\n * @param allowDefaultRolesCreation\n * @param includeCollectionConfigPermissions\n */\nexport function useBuildUserManagement<CONTROLLER extends AuthController<any> = AuthController<any>,\n USER extends User = CONTROLLER extends AuthController<infer U> ? U : any>\n({\n authController,\n dataSourceDelegate,\n usersPath = \"__FIRECMS/config/users\",\n rolesPath = \"__FIRECMS/config/roles\",\n allowDefaultRolesCreation,\n includeCollectionConfigPermissions\n }: UserManagementParams<CONTROLLER>): UserManagement<USER> & CONTROLLER {\n\n if (!authController) {\n throw Error(\"useBuildUserManagement: You need to provide an authController since version 3.0.0-beta.11. Check https://firecms.co/docs/pro/migrating_from_v3_beta\");\n }\n\n const [rolesLoading, setRolesLoading] = React.useState<boolean>(true);\n const [usersLoading, setUsersLoading] = React.useState<boolean>(true);\n const [roles, setRoles] = React.useState<Role[]>([]);\n const [usersWithRoleIds, setUsersWithRoleIds] = React.useState<UserWithRoleIds<USER>[]>([]);\n\n const users = usersWithRoleIds.map(u => ({\n ...u,\n roles: roles.filter(r => u.roles?.includes(r.id))\n }) as USER);\n\n const [rolesError, setRolesError] = React.useState<Error | undefined>();\n const [usersError, setUsersError] = React.useState<Error | undefined>();\n\n const _usersLoading = usersLoading;\n const _rolesLoading = rolesLoading;\n\n const loading = _rolesLoading || _usersLoading;\n\n useEffect(() => {\n if (!dataSourceDelegate || !rolesPath) return;\n if (dataSourceDelegate.initialised !== undefined && !dataSourceDelegate.initialised) return;\n if (authController?.initialLoading) return;\n // if (authController.user === null) {\n // setRolesLoading(false);\n // return;\n // }\n\n setRolesLoading(true);\n return dataSourceDelegate.listenCollection?.({\n path: rolesPath,\n onUpdate(entities: Entity<any>[]): void {\n setRolesError(undefined);\n try {\n const newRoles = entityToRoles(entities);\n if (!equal(newRoles, roles)) {\n setRoles(newRoles);\n }\n } catch (e) {\n setRoles([]);\n console.error(\"Error loading roles\", e);\n setRolesError(e as Error);\n }\n setRolesLoading(false);\n },\n onError(e: any): void {\n setRoles([]);\n console.error(\"Error loading roles\", e);\n setRolesError(e);\n setRolesLoading(false);\n }\n });\n\n }, [dataSourceDelegate?.initialised, authController?.initialLoading, authController?.user?.uid, rolesPath]);\n\n useEffect(() => {\n if (!dataSourceDelegate || !usersPath) return;\n if (dataSourceDelegate.initialised !== undefined && !dataSourceDelegate.initialised) {\n return;\n }\n if (authController?.initialLoading) {\n return;\n }\n\n setUsersLoading(true);\n return dataSourceDelegate.listenCollection?.({\n path: usersPath,\n onUpdate(entities: Entity<any>[]): void {\n console.debug(\"Updating users\", entities);\n setUsersError(undefined);\n try {\n const newUsers = entitiesToUsers(entities);\n // if (!equal(newUsers, usersWithRoleIds))\n setUsersWithRoleIds(newUsers);\n } catch (e) {\n setUsersWithRoleIds([]);\n console.error(\"Error loading users\", e);\n setUsersError(e as Error);\n }\n setUsersLoading(false);\n },\n onError(e: any): void {\n console.error(\"Error loading users\", e);\n setUsersWithRoleIds([]);\n setUsersError(e);\n setUsersLoading(false);\n }\n });\n\n }, [dataSourceDelegate?.initialised, authController?.initialLoading, authController?.user?.uid, usersPath]);\n\n const saveUser = useCallback(async (user: USER): Promise<USER> => {\n if (!dataSourceDelegate) throw Error(\"useBuildUserManagement Firebase not initialised\");\n if (!usersPath) throw Error(\"useBuildUserManagement Firestore not initialised\");\n\n console.debug(\"Persisting user\", user);\n\n const roleIds = user.roles?.map(r => r.id);\n const email = user.email?.toLowerCase().trim();\n if (!email) throw Error(\"Email is required\");\n\n const userExists = users.find(u => u.email?.toLowerCase() === email);\n const data = {\n ...user,\n roles: roleIds ?? []\n };\n if (!userExists) {\n // @ts-ignore\n data.created_on = new Date();\n }\n // delete the previous user entry if it exists and the uid has changed\n if (userExists && userExists.uid !== user.uid) {\n const entity: Entity<any> = {\n values: {},\n path: usersPath,\n id: userExists.uid\n }\n await dataSourceDelegate.deleteEntity({ entity })\n .then(() => {\n console.debug(\"Deleted previous user\", userExists);\n })\n .catch(e => {\n console.error(\"Error deleting user\", e);\n });\n\n }\n\n return dataSourceDelegate.saveEntity({\n status: \"existing\",\n path: usersPath,\n entityId: email,\n values: removeUndefined(data)\n }).then(() => user);\n }, [usersPath, dataSourceDelegate?.initialised]);\n\n const saveRole = useCallback((role: Role): Promise<void> => {\n if (!dataSourceDelegate) throw Error(\"useBuildUserManagement Firebase not initialised\");\n if (!rolesPath) throw Error(\"useBuildUserManagement Firestore not initialised\");\n console.debug(\"Persisting role\", role);\n const {\n id,\n ...roleData\n } = role;\n return dataSourceDelegate.saveEntity({\n status: \"existing\",\n path: rolesPath,\n entityId: id,\n values: removeUndefined(roleData)\n }).then(() => {\n return;\n });\n }, [rolesPath, dataSourceDelegate?.initialised]);\n\n const deleteUser = useCallback(async (user: User): Promise<void> => {\n if (!dataSourceDelegate) throw Error(\"useBuildUserManagement Firebase not initialised\");\n if (!usersPath) throw Error(\"useBuildUserManagement Firestore not initialised\");\n console.debug(\"Deleting\", user);\n const { uid } = user;\n const entity: Entity<any> = {\n path: usersPath,\n id: uid,\n values: {}\n };\n await dataSourceDelegate.deleteEntity({ entity })\n }, [usersPath, dataSourceDelegate?.initialised]);\n\n const deleteRole = useCallback(async (role: Role): Promise<void> => {\n if (!dataSourceDelegate) throw Error(\"useBuildUserManagement Firebase not initialised\");\n if (!rolesPath) throw Error(\"useBuildUserManagement Firestore not initialised\");\n console.debug(\"Deleting\", role);\n const { id } = role;\n const entity: Entity<any> = {\n path: rolesPath,\n id: id,\n values: {}\n };\n await dataSourceDelegate.deleteEntity({ entity })\n }, [rolesPath, dataSourceDelegate?.initialised]);\n\n const collectionPermissions: PermissionsBuilder = useCallback(({\n collection,\n user\n }) =>\n resolveUserRolePermissions({\n collection,\n user\n }), []);\n\n const defineRolesFor: ((user: User) => Role[] | undefined) = useCallback((user) => {\n if (!usersWithRoleIds) throw Error(\"Users not loaded\");\n const users = usersWithRoleIds.map(u => ({\n ...u,\n roles: roles.filter(r => u.roles?.includes(r.id))\n }) as User);\n const mgmtUser = users.find(u => u.email?.toLowerCase() === user?.email?.toLowerCase());\n return mgmtUser?.roles;\n }, [roles, usersWithRoleIds]);\n\n const authenticator: Authenticator<USER> = useCallback(({ user }) => {\n\n if (loading) {\n return false;\n }\n if (user === null) {\n console.warn(\"User is null, returning\");\n return false;\n }\n\n if (users.length === 0) {\n console.warn(\"No users created yet\");\n return true; // If there are no users created yet, we allow access to every user\n }\n\n const mgmtUser = users.find(u => u.email?.toLowerCase() === user?.email?.toLowerCase());\n if (mgmtUser) {\n // check if the uid is updated in the user management system\n if (mgmtUser.uid !== user.uid) {\n console.warn(\"User uid has changed, updating user in user management system\");\n saveUser({\n ...mgmtUser,\n uid: user.uid\n }).then(() => {\n console.debug(\"User updated in user management system\", mgmtUser);\n }).catch(e => {\n console.error(\"Error updating user in user management system\", e);\n });\n }\n console.debug(\"User found in user management system\", mgmtUser);\n return true;\n }\n\n throw Error(\"Could not find a user with the provided email in the user management system.\");\n }, [loading, users]);\n\n const userRoles = authController.user ? defineRolesFor(authController.user) : undefined;\n const isAdmin = (userRoles ?? []).some(r => r.id === \"admin\");\n\n const userRoleIds = userRoles?.map(r => r.id);\n useEffect(() => {\n console.debug(\"Setting roles\", userRoles);\n authController.setUserRoles?.(userRoles ?? []);\n }, [userRoleIds]);\n\n const getUser = useCallback((uid: string): USER | null => {\n if (!users) return null;\n const user = users.find(u => u.uid === uid);\n return user ?? null;\n }, [users]);\n\n console.log(\"users\", users);\n return {\n loading,\n roles,\n users,\n saveUser,\n saveRole,\n rolesError,\n deleteUser,\n deleteRole,\n usersError,\n isAdmin,\n allowDefaultRolesCreation: allowDefaultRolesCreation === undefined ? true : allowDefaultRolesCreation,\n includeCollectionConfigPermissions: Boolean(includeCollectionConfigPermissions),\n collectionPermissions,\n defineRolesFor,\n authenticator,\n ...authController,\n initialLoading: authController.initialLoading || loading,\n userRoles: userRoles,\n getUser,\n user: authController.user ? {\n ...authController.user,\n roles: userRoles\n } : null\n }\n}\n\nconst entitiesToUsers = (docs: Entity<Omit<UserWithRoleIds, \"id\">>[]): (UserWithRoleIds)[] => {\n return docs.map((doc) => {\n const data = doc.values as any;\n const newVar = {\n uid: doc.id,\n ...data,\n created_on: data?.created_on,\n updated_on: data?.updated_on\n };\n return newVar as (UserWithRoleIds);\n });\n}\n\nconst entityToRoles = (entities: Entity<Omit<Role, \"id\">>[]): Role[] => {\n return entities.map((doc) => ({\n id: doc.id,\n ...doc.values\n } as Role));\n}\n","import React, { PropsWithChildren } from \"react\";\nimport { UserManagement } from \"./types\";\nimport { User } from \"@firecms/core\";\n\nexport const UserManagementContext = React.createContext<UserManagement<any>>({} as any);\n\nexport interface UserManagementProviderProps<U extends User = User> {\n userManagement: UserManagement<U>\n}\n\nexport function UserManagementProvider<U extends User = User>({\n children,\n userManagement\n }: PropsWithChildren<UserManagementProviderProps<U>>) {\n return (\n <UserManagementContext.Provider value={userManagement}>\n {children}\n </UserManagementContext.Provider>\n );\n};\n","import { useContext } from \"react\";\nimport { UserManagement } from \"../types\";\nimport { UserManagementContext } from \"../UserManagementProvider\";\nimport { User } from \"@firecms/core\";\nexport const useUserManagement = <USER extends User>() => useContext<UserManagement<USER>>(UserManagementContext);\n","import { Chip, getColorSchemeForSeed } from \"@firecms/ui\";\nimport { Role } from \"@firecms/core\";\n\nexport type RoleChipProps = {\n role: Role;\n}\n\nexport function RoleChip({ role }: RoleChipProps) {\n let colorScheme;\n if (role.isAdmin) {\n colorScheme = \"blueDarker\";\n } else if (role.id === \"editor\") {\n colorScheme = \"yellowLight\";\n } else if (role.id === \"viewer\") {\n colorScheme = \"grayLight\";\n } else {\n colorScheme = getColorSchemeForSeed(role.id);\n }\n\n return (\n <Chip\n colorScheme={colorScheme}\n key={role.id}>\n {role.name}\n </Chip>\n );\n\n}\n","import React, { useCallback, useState } from \"react\";\nimport * as Yup from \"yup\";\n\nimport { EntityCollection, FieldCaption, Role, toSnakeCase, useAuthController, User, } from \"@firecms/core\";\nimport {\n Button,\n Checkbox,\n CheckIcon,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n LoadingButton,\n Paper,\n Select,\n SelectItem,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n TextField,\n Tooltip,\n Typography\n} from \"@firecms/ui\";\nimport { useUserManagement } from \"../../hooks\";\nimport { Formex, getIn, useCreateFormex } from \"@firecms/formex\";\n\nexport const RoleYupSchema = Yup.object().shape({\n id: Yup.string().required(\"Required\"),\n name: Yup.string().required(\"Required\")\n});\n\nfunction canRoleBeEdited(loggedUser: User) {\n const loggedUserIsAdmin = loggedUser.roles?.map(r => r.id).includes(\"admin\");\n if (!loggedUserIsAdmin) {\n throw new Error(\"Only admins can edit roles\");\n }\n\n return true;\n}\n\nexport function RolesDetailsForm({\n open,\n role,\n editable,\n handleClose,\n collections\n }: {\n open: boolean,\n editable?: boolean,\n role?: Role,\n handleClose: () => void,\n collections?: EntityCollection[]\n}) {\n\n const { saveRole } = useUserManagement();\n const isNewRole = !role;\n const {\n user: loggedInUser\n } = useAuthController();\n\n const [savingError, setSavingError] = useState<Error | undefined>();\n\n const onRoleUpdated = useCallback((role: Role) => {\n setSavingError(undefined);\n if (!loggedInUser) throw new Error(\"User not found\");\n canRoleBeEdited(loggedInUser);\n return saveRole(role);\n }, [saveRole, loggedInUser]);\n\n const formex = useCreateFormex({\n initialValues: role ?? {\n name: \"\"\n } as Role,\n onSubmit: (role: Role, formexController) => {\n try {\n return onRoleUpdated(role)\n .then(() => {\n formexController.resetForm({\n values: role\n });\n handleClose();\n })\n .catch(e => {\n setSavingError(e);\n });\n } catch (e: any) {\n setSavingError(e);\n return Promise.resolve();\n }\n },\n validation: (values) => {\n return RoleYupSchema.validate(values, { abortEarly: false })\n .then(() => ({}))\n .catch((e) => {\n const errors: Record<string, string> = {};\n e.inner.forEach((error: any) => {\n errors[error.path] = error.message;\n });\n return errors;\n });\n }\n\n });\n\n const {\n isSubmitting,\n touched,\n values,\n errors,\n handleChange,\n setFieldValue,\n dirty,\n setFieldTouched\n } = formex;\n\n const isAdmin = values.isAdmin ?? false;\n const defaultCreate = values.defaultPermissions?.create ?? false;\n const defaultRead = values.defaultPermissions?.read ?? false;\n const defaultEdit = values.defaultPermissions?.edit ?? false;\n const defaultDelete = values.defaultPermissions?.delete ?? false;\n\n React.useEffect(() => {\n const idTouched = getIn(touched, \"id\");\n if (!idTouched && values.name) {\n setFieldValue(\"id\", toSnakeCase(values.name))\n }\n }, [touched, values.name]);\n\n return (\n <Dialog\n open={open}\n maxWidth={\"4xl\"}\n >\n <Formex value={formex}>\n <form noValidate\n autoComplete={\"off\"}\n onSubmit={formex.handleSubmit}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n position: \"relative\",\n height: \"100%\"\n }}>\n <DialogTitle variant={\"h4\"} gutterBottom={false}>\n Role\n </DialogTitle>\n <DialogContent className=\"flex-grow\">\n\n <div className={\"grid grid-cols-12 gap-8\"}>\n\n <div className={\"col-span-12 md:col-span-8\"}>\n <TextField\n name=\"name\"\n required\n error={touched.name && Boolean(errors.name)}\n value={values.name}\n disabled={isAdmin || !editable}\n onChange={handleChange}\n aria-describedby=\"name-helper-text\"\n label=\"Name\"\n />\n <FieldCaption>\n {touched.name && Boolean(errors.name) ? errors.name : \"Name of this role\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12 md:col-span-4\"}>\n <TextField\n name=\"id\"\n required\n error={touched.id && Boolean(errors.id)}\n value={values.id}\n disabled={!isNewRole || !editable}\n onChange={(e) => {\n handleChange(e);\n setFieldTouched(\"id\", true)\n }}\n aria-describedby=\"id-helper-text\"\n label=\"ID\"\n />\n <FieldCaption>\n {touched.id && Boolean(errors.id) ? errors.id : \"ID of this role\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12\"}>\n <Paper className=\"bg-inherit overflow-hidden\">\n <Table className={\"w-full rounded-md\"}>\n <TableHeader className={\"rounded-md\"}>\n <TableCell></TableCell>\n <TableCell\n align=\"center\">Create\n entities\n </TableCell>\n <TableCell\n align=\"center\">Read\n entities\n </TableCell>\n <TableCell\n align=\"center\">Update\n entities\n </TableCell>\n <TableCell\n align=\"center\">Delete\n entities\n </TableCell>\n <TableCell\n align=\"center\">\n </TableCell>\n </TableHeader>\n\n <TableBody>\n <TableRow>\n <TableCell\n scope=\"row\">\n <strong>All\n collections</strong>\n </TableCell>\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Create entities in collections\">\n <Checkbox\n disabled={isAdmin || !editable}\n checked={(isAdmin || defaultCreate) ?? false}\n onCheckedChange={(checked) => setFieldValue(\"defaultPermissions.create\", checked)}\n />\n </Tooltip>\n </TableCell>\n\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Access all data in every collection\">\n <Checkbox\n disabled={isAdmin || !editable}\n checked={(isAdmin || defaultRead) ?? false}\n onCheckedChange={(checked) => setFieldValue(\"defaultPermissions.read\", checked)}\n />\n </Tooltip>\n </TableCell>\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Update data in any collection\">\n <Checkbox\n disabled={isAdmin || !editable}\n checked={(isAdmin || defaultEdit) ?? false}\n onCheckedChange={(checked) => setFieldValue(\"defaultPermissions.edit\", checked)}\n />\n </Tooltip>\n </TableCell>\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Delete data in any collection\">\n <Checkbox\n disabled={isAdmin || !editable}\n checked={(isAdmin || defaultDelete) ?? false}\n onCheckedChange={(checked) => setFieldValue(\"defaultPermissions.delete\", checked)}\n />\n\n </Tooltip>\n </TableCell>\n <TableCell\n align=\"center\">\n </TableCell>\n </TableRow>\n {collections && collections.map((col) => (\n <TableRow key={col.name}>\n <TableCell\n scope=\"row\">\n {col.name}\n </TableCell>\n <TableCell\n align=\"center\">\n <Checkbox\n disabled={isAdmin || defaultCreate || !editable}\n checked={(isAdmin || defaultCreate || getIn(values, `collectionPermissions.${col.id}.create`)) ?? false}\n onCheckedChange={(checked) => setFieldValue(`collectionPermissions.${col.id}.create`, checked)}/>\n </TableCell>\n <TableCell\n align=\"center\">\n <Checkbox\n disabled={isAdmin || defaultRead || !editable}\n checked={(isAdmin || defaultRead || getIn(values, `collectionPermissions.${col.id}.read`)) ?? false}\n onCheckedChange={(checked) => setFieldValue(`collectionPermissions.${col.id}.read`, checked)}/>\n </TableCell>\n <TableCell\n align=\"center\">\n <Checkbox\n disabled={isAdmin || defaultEdit || !editable}\n checked={(isAdmin || defaultEdit || getIn(values, `collectionPermissions.${col.id}.edit`)) ?? false}\n onCheckedChange={(checked) => setFieldValue(`collectionPermissions.${col.id}.edit`, checked)}/>\n </TableCell>\n <TableCell\n align=\"center\">\n <Checkbox\n disabled={isAdmin || defaultDelete || !editable}\n checked={(isAdmin || defaultDelete || getIn(values, `collectionPermissions.${col.id}.delete`)) ?? false}\n onCheckedChange={(checked) => setFieldValue(`collectionPermissions.${col.id}.delete`, checked)}/>\n </TableCell>\n\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Allow all permissions in this collections\">\n <Button\n className={\"color-inherit\"}\n onClick={() => {\n setFieldValue(`collectionPermissions.${col.id}.create`, true);\n setFieldValue(`collectionPermissions.${col.id}.read`, true);\n setFieldValue(`collectionPermissions.${col.id}.edit`, true);\n setFieldValue(`collectionPermissions.${col.id}.delete`, true);\n }}\n disabled={isAdmin || !editable}\n variant={\"text\"}>\n All\n </Button>\n\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Paper>\n <FieldCaption>\n You can customise the permissions\n that the users related to this\n role can perform in the entities\n of each collection\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12 md:col-span-4\"}>\n <Select\n error={touched.config && Boolean(errors.config)}\n size={\"large\"}\n fullWidth={true}\n id=\"createCollections\"\n name=\"createCollections\"\n label=\"Create collections\"\n position={\"item-aligned\"}\n disabled={isAdmin || !editable}\n onChange={(event) => setFieldValue(\"config.createCollections\", event.target.value === \"true\")}\n value={isAdmin || values.config?.createCollections ? \"true\" : \"false\"}\n renderValue={(value: any) => value === \"true\" ? \"Yes\" : \"No\"}\n >\n <SelectItem\n value={\"true\"}> Yes </SelectItem>\n <SelectItem\n value={\"false\"}> No </SelectItem>\n </Select>\n\n <FieldCaption>\n {touched.config && Boolean(errors.config) ? errors.config : \"Can the user create collections\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12 md:col-span-4\"}>\n <Select\n size={\"large\"}\n fullWidth={true}\n error={touched.config && Boolean(errors.config)}\n id=\"editCollections\"\n name=\"editCollections\"\n label=\"Edit collections\"\n disabled={isAdmin || !editable}\n position={\"item-aligned\"}\n onChange={(event) => setFieldValue(\"config.editCollections\", event.target.value === \"own\" ? \"own\" : event.target.value === \"true\")}\n value={isAdmin ? \"true\" : (values.config?.editCollections === \"own\" ? \"own\" : (values.config?.editCollections ? \"true\" : \"false\"))}\n renderValue={(value: any) => value === \"own\" ? \"Own\" : (value === \"true\" ? \"Yes\" : \"No\")}\n >\n <SelectItem\n value={\"true\"}> Yes </SelectItem>\n <SelectItem\n value={\"false\"}> No </SelectItem>\n <SelectItem\n value={\"own\"}> Only\n his/her own </SelectItem>\n </Select>\n\n <FieldCaption>\n {touched.config && Boolean(errors.config) ? errors.config : \"Can the user edit collections\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12 md:col-span-4\"}>\n <Select\n size={\"large\"}\n fullWidth={true}\n error={touched.config && Boolean(errors.config)}\n id=\"deleteCollections\"\n name=\"deleteCollections\"\n label=\"Delete collections\"\n disabled={isAdmin || !editable}\n position={\"item-aligned\"}\n onChange={(event) => setFieldValue(\"config.deleteCollections\", event.target.value === \"own\" ? \"own\" : event.target.value === \"true\")}\n value={isAdmin ? \"true\" : (values.config?.deleteCollections === \"own\" ? \"own\" : (values.config?.deleteCollections ? \"true\" : \"false\"))}\n renderValue={(value: any) => value === \"own\" ? \"Own\" : (value === \"true\" ? \"Yes\" : \"No\")}\n >\n <SelectItem\n value={\"true\"}> Yes </SelectItem>\n <SelectItem\n value={\"false\"}> No </SelectItem>\n <SelectItem\n value={\"own\"}> Only\n his/her own </SelectItem>\n </Select>\n\n <FieldCaption>\n {touched.config && Boolean(errors.config) ? errors.config : \"Can the user delete collections\"}\n </FieldCaption>\n\n </div>\n\n </div>\n </DialogContent>\n\n <DialogActions position={\"sticky\"}>\n {savingError && <Typography className={\"text-red-500 dark:text-red-500\"}>\n {savingError.message ?? \"There was an error saving this role\"}\n </Typography>}\n <Button variant={\"text\"}\n onClick={() => {\n handleClose();\n }}>\n Cancel\n </Button>\n <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n disabled={!dirty}\n loading={isSubmitting}\n startIcon={<CheckIcon/>}\n >\n {isNewRole ? \"Create role\" : \"Update\"}\n </LoadingButton>\n </DialogActions>\n </form>\n\n </Formex>\n </Dialog>\n );\n}\n","import { Role } from \"@firecms/core\";\n\nexport const DEFAULT_ROLES: Role[] = [\n {\n id: \"admin\",\n name: \"Admin\",\n isAdmin: true\n },\n {\n id: \"editor\",\n name: \"Editor\",\n isAdmin: false,\n defaultPermissions: {\n read: true,\n create: true,\n edit: true,\n delete: true\n },\n config: {\n createCollections: true,\n editCollections: \"own\",\n deleteCollections: \"own\"\n }\n },\n {\n id: \"viewer\",\n name: \"Viewer\",\n isAdmin: false,\n defaultPermissions: {\n read: true,\n create: false,\n edit: false,\n delete: false\n }\n }\n];\n","import { useState } from \"react\";\nimport {\n Button,\n CenteredView,\n Checkbox,\n DeleteIcon,\n IconButton,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n Tooltip,\n Typography\n} from \"@firecms/ui\";\nimport { ConfirmationDialog, Role } from \"@firecms/core\";\nimport { useUserManagement } from \"../../hooks\";\nimport { RoleChip } from \"./RoleChip\";\nimport { DEFAULT_ROLES } from \"./default_roles\";\n\nexport function RolesTable({\n onRoleClicked,\n editable\n }: {\n onRoleClicked: (role: Role) => void;\n editable: boolean;\n}) {\n\n const {\n roles,\n saveRole,\n deleteRole,\n allowDefaultRolesCreation\n } = useUserManagement();\n\n const [roleToBeDeleted, setRoleToBeDeleted] = useState<Role | undefined>(undefined);\n const [deleteInProgress, setDeleteInProgress] = useState<boolean>(false);\n\n return <div\n className=\"w-full overflow-auto\">\n <Table className={\"w-full\"}>\n <TableHeader>\n <TableCell header={true} className=\"w-16\"></TableCell>\n <TableCell header={true}>Role</TableCell>\n <TableCell header={true} className={\"items-center\"}>Is Admin</TableCell>\n <TableCell header={true}>Default permissions</TableCell>\n </TableHeader>\n\n <TableBody>\n {roles && roles.map((role) => {\n const canCreateAll = role.isAdmin || role.defaultPermissions?.create;\n const canReadAll = role.isAdmin || role.defaultPermissions?.read;\n const canUpdateAll = role.isAdmin || role.defaultPermissions?.edit;\n const canDeleteAll = role.isAdmin || role.defaultPermissions?.delete;\n return (\n <TableRow\n key={role.name}\n onClick={() => {\n onRoleClicked(role);\n }}\n >\n <TableCell style={{ width: \"64px\" }}>\n {!role.isAdmin &&\n <Tooltip\n asChild={true}\n title={\"Delete this role\"}>\n <IconButton\n size={\"small\"}\n disabled={!editable}\n onClick={(event) => {\n event.stopPropagation();\n return setRoleToBeDeleted(role);\n }}>\n <DeleteIcon/>\n </IconButton>\n </Tooltip>}\n </TableCell>\n <TableCell>\n <RoleChip role={role}/>\n </TableCell>\n <TableCell className={\"items-center\"}>\n <Checkbox checked={role.isAdmin ?? false}/>\n </TableCell>\n <TableCell>\n <ul>\n {canCreateAll && <li>Create</li>}\n {canReadAll && <li>Read</li>}\n {canUpdateAll && <li>Update</li>}\n {canDeleteAll && <li>Delete</li>}\n </ul>\n </TableCell>\n </TableRow>\n );\n })}\n\n {(!roles || roles.length === 0) && <TableRow>\n <TableCell colspan={4}>\n <CenteredView className={\"flex flex-col gap-4 my-8 items-center\"}>\n <Typography variant={\"label\"}>\n You don&apos;t have any roles yet.\n </Typography>\n {allowDefaultRolesCreation && <Button variant={\"outlined\"}\n onClick={() => {\n DEFAULT_ROLES.forEach((role) => {\n saveRole(role);\n });\n }}>\n Create default roles\n </Button>}\n </CenteredView>\n </TableCell>\n </TableRow>}\n\n </TableBody>\n\n </Table>\n\n <ConfirmationDialog\n open={Boolean(roleToBeDeleted)}\n loading={deleteInProgress}\n onAccept={() => {\n if (roleToBeDeleted) {\n setDeleteInProgress(true);\n deleteRole(roleToBeDeleted)\n .then(() => {\n setRoleToBeDeleted(undefined);\n })\n .finally(() => {\n setDeleteInProgress(false);\n })\n }\n }}\n onCancel={() => {\n setRoleToBeDeleted(undefined);\n }}\n title={<>Delete?</>}\n body={<>Are you sure you want to delete this role?</>}/>\n\n </div>;\n}\n","import React, { useCallback, useState } from \"react\";\n\nimport { Role, useNavigationController } from \"@firecms/core\";\nimport { AddIcon, Button, Container, Typography } from \"@firecms/ui\";\nimport { RolesTable } from \"./RolesTable\";\nimport { RolesDetailsForm } from \"./RolesDetailsForm\";\n\nexport const RolesView = React.memo(\n function RolesView({ children }: { children?: React.ReactNode }) {\n\n const { collections } = useNavigationController();\n const [dialogOpen, setDialogOpen] = useState(false);\n const [selectedRole, setSelectedRole] = useState<Role | undefined>();\n\n const onRoleClicked = useCallback((user: Role) => {\n setDialogOpen(true);\n setSelectedRole(user);\n }, []);\n\n const handleClose = () => {\n setSelectedRole(undefined);\n setDialogOpen(false);\n };\n\n return (\n <Container className=\"w-full flex flex-col py-4 gap-4\" maxWidth={\"6xl\"}>\n\n {children}\n\n <div className=\"flex items-center mt-12\">\n <Typography gutterBottom variant=\"h4\"\n className=\"flex-grow\"\n component=\"h4\">\n Roles\n </Typography>\n <Button\n size={\"large\"}\n startIcon={<AddIcon/>}\n onClick={() => setDialogOpen(true)}>\n Add role\n </Button>\n </div>\n\n <RolesTable onRoleClicked={onRoleClicked} editable={true}/>\n\n <RolesDetailsForm\n key={selectedRole?.id ?? \"new\"}\n open={dialogOpen}\n role={selectedRole}\n editable={true}\n collections={collections}\n handleClose={handleClose}/>\n\n </Container>\n )\n });\n","import React, { useCallback } from \"react\";\nimport * as Yup from \"yup\";\nimport {\n Button,\n CheckIcon,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n LoadingButton,\n MultiSelect,\n MultiSelectItem,\n TextField,\n} from \"@firecms/ui\";\nimport { FieldCaption, Role, useAuthController, User, useSnackbarController } from \"@firecms/core\";\nimport { Formex, useCreateFormex } from \"@firecms/formex\";\n\nimport { areRolesEqual } from \"../../utils\";\nimport { useUserManagement } from \"../../hooks\";\nimport { RoleChip } from \"../roles\";\n\nexport const UserYupSchema = Yup.object().shape({\n displayName: Yup.string().required(\"Required\"),\n email: Yup.string().email().required(\"Required\"),\n roles: Yup.array().min(1)\n});\n\nfunction canUserBeEdited(loggedUser: User, user: User, users: User[], roles: Role[], prevUser?: User) {\n const admins = users.filter(u => u.roles?.map(r => r.id).includes(\"admin\"));\n const loggedUserIsAdmin = loggedUser.roles?.map(r => r.id).includes(\"admin\");\n const didRolesChange = !prevUser || !areRolesEqual(prevUser.roles ?? [], user.roles ?? []);\n\n if (didRolesChange && !loggedUserIsAdmin) {\n throw new Error(\"Only admins can change roles\");\n }\n\n // was the admin role removed\n const adminRoleRemoved = prevUser && prevUser.roles?.map(r => r.id).includes(\"admin\") && !user.roles?.map(r => r.id).includes(\"admin\");\n\n // avoid removing the last admin\n if (adminRoleRemoved && admins.length === 1) {\n throw new Error(\"There must be at least one admin\");\n }\n return true;\n}\n\nexport function UserDetailsForm({\n open,\n user: userProp,\n handleClose\n }: {\n open: boolean,\n user?: User,\n handleClose: () => void\n}) {\n\n const snackbarController = useSnackbarController();\n const {\n user: loggedInUser\n } = useAuthController();\n const {\n saveUser,\n users,\n roles,\n } = useUserManagement();\n const isNewUser = !userProp;\n\n const onUserUpdated = useCallback((savedUser: User): Promise<User> => {\n if (!loggedInUser) {\n throw new Error(\"Logged user not found\");\n }\n try {\n canUserBeEdited(loggedInUser, savedUser, users, roles, userProp);\n return saveUser(savedUser);\n } catch (e: any) {\n return Promise.reject(e);\n }\n }, [roles, saveUser, userProp, users, loggedInUser]);\n\n const formex = useCreateFormex({\n initialValues: userProp ?? {\n displayName: \"\",\n email: \"\",\n roles: roles.filter(r => r.id === \"editor\")\n } as User,\n validation: (values) => {\n return UserYupSchema.validate(values, { abortEarly: false })\n .then(() => {\n return {};\n }).catch((e) => {\n return e.inner.reduce((acc: any, error: any) => {\n acc[error.path] = error.message;\n return acc;\n }, {});\n });\n },\n onSubmit: (user: User, formexController) => {\n\n return onUserUpdated(user)\n .then(() => {\n handleClose();\n formexController.resetForm({\n values: user\n });\n }).catch((e) => {\n snackbarController.open({\n type: \"error\",\n message: e.message\n });\n });\n }\n });\n\n const {\n isSubmitting,\n touched,\n handleChange,\n values,\n errors,\n setFieldValue,\n dirty,\n handleSubmit,\n submitCount\n } = formex;\n\n return (\n <Dialog\n open={open}\n onOpenChange={(open) => !open ? handleClose() : undefined}\n maxWidth={\"4xl\"}\n >\n <Formex value={formex}>\n <form\n onSubmit={handleSubmit}\n autoComplete={\"off\"}\n noValidate\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n position: \"relative\",\n height: \"100%\"\n }}>\n\n <DialogTitle variant={\"h4\"} gutterBottom={false}>\n User\n </DialogTitle>\n <DialogContent className=\"h-full flex-grow\">\n\n <div className={\"grid grid-cols-12 gap-8\"}>\n\n <div className={\"col-span-12\"}>\n <TextField\n name=\"displayName\"\n required\n error={submitCount > 0 && Boolean(errors.displayName)}\n value={values.displayName ?? \"\"}\n onChange={handleChange}\n aria-describedby=\"name-helper-text\"\n label=\"Name\"\n />\n <FieldCaption>\n {submitCount > 0 && Boolean(errors.displayName) ? errors.displayName : \"Name of this user\"}\n </FieldCaption>\n </div>\n <div className={\"col-span-12\"}>\n <TextField\n required\n error={submitCount > 0 && Boolean(errors.email)}\n name=\"email\"\n value={values.email ?? \"\"}\n onChange={handleChange}\n aria-describedby=\"email-helper-text\"\n label=\"Email\"\n />\n <FieldCaption>\n {submitCount > 0 && Boolean(errors.email) ? errors.email : \"Email of this user\"}\n </FieldCaption>\n </div>\n <div className={\"col-span-12\"}>\n <MultiSelect\n className={\"w-full\"}\n label=\"Roles\"\n value={values.roles?.map(r => r.id) ?? []}\n onValueChange={(value: string[]) => setFieldValue(\"roles\", value.map(id => roles.find(r => r.id === id) as Role))}\n // renderValue={(value: string) => {\n // const userRole = roles\n // .find((role) => role.id === value);\n // if (!userRole) return null;\n // return <div className=\"flex flex-wrap space-x-2 space-y-2\">\n // <RoleChip key={userRole?.id} role={userRole}/>\n // </div>;\n // }}\n >\n {roles.map(userRole => <MultiSelectItem key={userRole.id}\n value={userRole.id}>\n <RoleChip key={userRole?.id} role={userRole}/>\n </MultiSelectItem>)}\n </MultiSelect>\n </div>\n\n </div>\n\n </DialogContent>\n\n <DialogActions>\n\n <Button variant={\"text\"}\n onClick={() => {\n handleClose();\n }}>\n Cancel\n </Button>\n\n <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n disabled={!dirty}\n loading={isSubmitting}\n startIcon={<CheckIcon/>}\n >\n {isNewUser ? \"Create user\" : \"Update\"}\n </LoadingButton>\n </DialogActions>\n </form>\n </Formex>\n\n </Dialog>\n );\n}\n","import { useState } from \"react\";\n\nimport { format } from \"date-fns\";\nimport * as locales from \"date-fns/locale\";\n\nimport {\n defaultDateFormat,\n ConfirmationDialog, Role,\n useAuthController,\n useCustomizationController, User,\n useSnackbarController\n} from \"@firecms/core\";\nimport {\n Button,\n CenteredView,\n DeleteIcon,\n IconButton,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n Tooltip,\n Typography,\n} from \"@firecms/ui\";\nimport { useUserManagement } from \"../../hooks\";\nimport { RoleChip } from \"../roles\";\nimport { PersistedUser } from \"../../types\";\n\nexport function UsersTable({ onUserClicked }: {\n onUserClicked: (user: User) => void;\n}) {\n\n const {\n users,\n saveUser,\n deleteUser\n } = useUserManagement<PersistedUser>();\n\n const authController = useAuthController();\n const snackbarController = useSnackbarController();\n\n const customizationController = useCustomizationController();\n const dateUtilsLocale = customizationController?.locale ? locales[customizationController?.locale as keyof typeof locales] : undefined;\n const dateFormat: string = customizationController?.dateTimeFormat ?? defaultDateFormat;\n\n const [userToBeDeleted, setUserToBeDeleted] = useState<User | undefined>(undefined);\n const [deleteInProgress, setDeleteInProgress] = useState<boolean>(false);\n\n return (\n <div className=\"overflow-auto\">\n\n <Table className={\"w-full\"}>\n\n <TableHeader>\n <TableCell className=\"truncate w-16\"></TableCell>\n <TableCell>Email</TableCell>\n <TableCell>Name</TableCell>\n <TableCell>Roles</TableCell>\n <TableCell>Created on</TableCell>\n </TableHeader>\n <TableBody>\n {users && users.map((user) => {\n\n const userRoles: Role[] | undefined = user.roles;\n\n const formattedDate = user.created_on ? format(user.created_on, dateFormat, { locale: dateUtilsLocale }) : \"\";\n\n return (\n <TableRow\n key={\"row_\" + user.uid}\n onClick={() => {\n onUserClicked(user);\n }}\n >\n <TableCell className={\"w-10\"}>\n <Tooltip\n asChild={true}\n title={\"Delete this user\"}>\n <IconButton\n size={\"small\"}\n onClick={(event) => {\n event.stopPropagation();\n return setUserToBeDeleted(user);\n }}>\n <DeleteIcon/>\n </IconButton>\n </Tooltip>\n </TableCell>\n <TableCell>{user.email}</TableCell>\n <TableCell className={\"font-medium align-left\"}>{user.displayName}</TableCell>\n <TableCell className=\"align-left\">\n {userRoles\n ? <div className=\"flex flex-wrap gap-2\">\n {userRoles.map(userRole =>\n <RoleChip key={userRole?.id} role={userRole}/>\n )}\n </div>\n : null}\n </TableCell>\n <TableCell>{formattedDate}</TableCell>\n </TableRow>\n );\n })}\n\n {(!users || users.length === 0) && <TableRow>\n <TableCell colspan={6}>\n <CenteredView className={\"flex flex-col gap-4 my-8 items-center\"}>\n <Typography variant={\"label\"}>\n There are no users yet\n </Typography>\n <Button variant={\"outlined\"}\n onClick={() => {\n if (!authController.user?.uid) {\n throw Error(\"UsersTable, authController misconfiguration\");\n }\n saveUser({\n uid: authController.user?.uid,\n email: authController.user?.email,\n displayName: authController.user?.displayName,\n photoURL: authController.user?.photoURL,\n providerId: authController.user?.providerId,\n isAnonymous: authController.user?.isAnonymous,\n roles: [{ id: \"admin\", name: \"Admin\" }],\n created_on: new Date()\n })\n .then(() => {\n snackbarController.open({\n type: \"success\",\n message: \"User added successfully\"\n })\n })\n .catch((error) => {\n snackbarController.open({\n type: \"error\",\n message: \"Error adding user: \" + error.message,\n })\n });\n }}>\n\n Add the logged user as an admin\n </Button>\n </CenteredView>\n </TableCell>\n </TableRow>}\n\n </TableBody>\n </Table>\n\n <ConfirmationDialog\n open={Boolean(userToBeDeleted)}\n loading={deleteInProgress}\n onAccept={() => {\n if (userToBeDeleted) {\n setDeleteInProgress(true);\n deleteUser(userToBeDeleted)\n .then(() => {\n setUserToBeDeleted(undefined);\n })\n .catch((error) => {\n snackbarController.open({\n type: \"error\",\n message: \"Error deleting user: \" + error.message,\n })\n })\n .finally(() => {\n setDeleteInProgress(false);\n })\n }\n }}\n onCancel={() => {\n setUserToBeDeleted(undefined);\n }}\n title={<>Delete?</>}\n body={<>Are you sure you want to delete this user?</>}/>\n </div>);\n}\n","import { AddIcon, Button, Container, Typography } from \"@firecms/ui\";\n\nimport { UsersTable } from \"./UsersTable\";\nimport { UserDetailsForm } from \"./UserDetailsForm\";\nimport React, { useCallback, useState } from \"react\";\nimport { useUserManagement } from \"../../hooks/useUserManagement\";\nimport { User } from \"@firecms/core\";\n\nexport const UsersView = function UsersView({ children }: { children?: React.ReactNode }) {\n\n const [dialogOpen, setDialogOpen] = useState<boolean>();\n const [selectedUser, setSelectedUser] = useState<User | undefined>();\n\n const { users } = useUserManagement();\n\n const onUserClicked = useCallback((user: User) => {\n setSelectedUser(user);\n setDialogOpen(true);\n }, []);\n\n const handleClose = useCallback(() => {\n setDialogOpen(false);\n setSelectedUser(undefined);\n }, []);\n\n return (\n <Container className=\"w-full flex flex-col py-4 gap-4\" maxWidth={\"6xl\"}>\n\n {children}\n\n <div\n className=\"flex items-center mt-12\">\n <Typography gutterBottom variant=\"h4\"\n className=\"flex-grow\"\n component=\"h4\">\n Users\n </Typography>\n <Button\n size={\"large\"}\n startIcon={<AddIcon/>}\n onClick={() => setDialogOpen(true)}>\n Add user\n </Button>\n </div>\n\n <UsersTable onUserClicked={onUserClicked}/>\n\n <UserDetailsForm\n key={selectedUser?.uid ?? \"new\"}\n open={dialogOpen ?? false}\n user={selectedUser}\n handleClose={handleClose}/>\n\n </Container>\n )\n};\n","import { FireCMSPlugin, useAuthController, User, useSnackbarController } from \"@firecms/core\";\nimport { UserManagementProvider } from \"./UserManagementProvider\";\nimport { UserManagement } from \"./types\";\nimport { AddIcon, Button, Paper, Typography } from \"@firecms/ui\";\nimport { DEFAULT_ROLES } from \"./components/roles/default_roles\";\n\nexport function useUserManagementPlugin<USER extends User = any>({ userManagement }: {\n userManagement: UserManagement<USER>,\n}): FireCMSPlugin {\n\n const noUsers = userManagement.users.length === 0;\n const noRoles = userManagement.roles.length === 0;\n\n return {\n key: \"user_management\",\n loading: userManagement.loading,\n\n homePage: {\n additionalChildrenStart: noUsers || noRoles\n ? <IntroWidget\n noUsers={noUsers}\n noRoles={noRoles}\n userManagement={userManagement}/>\n : undefined\n },\n provider: {\n Component: UserManagementProvider,\n props: {\n userManagement\n }\n }\n }\n}\n\nexport function IntroWidget({\n noUsers,\n noRoles,\n userManagement\n }: {\n noUsers: boolean;\n noRoles: boolean;\n userManagement: UserManagement<any>;\n}) {\n\n const authController = useAuthController();\n const snackbarController = useSnackbarController();\n\n const buttonLabel = noUsers && noRoles\n ? \"Create default roles and add current user as admin\"\n : noUsers\n ? \"Add current user as admin\"\n : noRoles ? \"Create default roles\" : undefined;\n\n return (\n <Paper\n className={\"my-4 flex flex-col px-4 py-6 bg-white dark:bg-surface-accent-800 gap-2\"}>\n <Typography variant={\"subtitle2\"} className={\"uppercase\"}>Create your users and roles</Typography>\n <Typography>\n You have no users or roles defined. You can create default roles and add the current user as admin.\n </Typography>\n <Button onClick={() => {\n if (!authController.user?.uid) {\n throw Error(\"UsersTable, authController misconfiguration\");\n }\n if (noUsers) {\n userManagement.saveUser({\n uid: authController.user?.uid,\n email: authController.user?.email,\n displayName: authController.user?.displayName,\n photoURL: authController.user?.photoURL,\n providerId: authController.user?.providerId,\n isAnonymous: authController.user?.isAnonymous,\n roles: [{\n id: \"admin\",\n name: \"Admin\"\n }],\n created_on: new Date()\n })\n .then(() => {\n snackbarController.open({\n type: \"success\",\n message: \"User added successfully\"\n })\n })\n .catch((error) => {\n snackbarController.open({\n type: \"error\",\n message: \"Error adding user: \" + error.message\n })\n });\n }\n if (noRoles) {\n DEFAULT_ROLES.forEach((role) => {\n userManagement.saveRole(role);\n });\n }\n }}>\n <AddIcon/>\n {buttonLabel}\n </Button>\n </Paper>\n );\n\n}\n","import { CMSView } from \"@firecms/core\";\nimport { RolesView, UsersView } from \"./components\";\n\nexport const userManagementAdminViews: CMSView[] = [\n {\n path: \"users\",\n name: \"CMS Users\",\n group: \"Admin\",\n icon: \"face\",\n view: <UsersView/>\n },\n {\n path: \"roles\",\n name: \"Roles\",\n group: \"Admin\",\n icon: \"gpp_good\",\n view: <RolesView/>\n }\n]\n"],"names":["RESERVED_GROUPS","DEFAULT_PERMISSIONS","read","edit","create","delete","resolveUserRolePermissions","collection","user","roles","ownerId","uid","basePermissions","map","role","resolveCollectionRole","id","reduce","mergePermissions","isAdmin","defaultPermissions","thisCollectionPermissions","collectionPermissions","permA","permB","getUserRoles","fireCMSUser","undefined","find","r","filter","Boolean","areRolesEqual","rolesA","rolesB","rolesAIds","rolesBIds","length","every","includes","cacheDelegatedLoginToken","projectId","delegatedToken","data","parseJwt","expiry","Date","exp","localStorage","setItem","JSON","stringify","token","getDelegatedLoginTokenFromCache","entry","getItem","parse","clearDelegatedLoginTokensCache","i","key","startsWith","removeItem","Error","base64Url","split","base64","replace","jsonPayload","decodeURIComponent","window","atob","c","charCodeAt","toString","slice","join","darkenColor","hexColor","darkenBy","test","color","substring","parseInt","g","b","Math","floor","hexToRgbaWithOpacity","opacity","alpha","useBuildUserManagement","authController","dataSourceDelegate","usersPath","rolesPath","allowDefaultRolesCreation","includeCollectionConfigPermissions","rolesLoading","setRolesLoading","React","useState","usersLoading","setUsersLoading","setRoles","usersWithRoleIds","setUsersWithRoleIds","users","u","rolesError","setRolesError","usersError","setUsersError","_usersLoading","_rolesLoading","loading","useEffect","initialised","initialLoading","listenCollection","path","onUpdate","entities","newRoles","entityToRoles","equal","e","error","onError","debug","newUsers","entitiesToUsers","saveUser","useCallback","roleIds","email","toLowerCase","trim","userExists","created_on","entity","values","deleteEntity","then","catch","saveEntity","status","entityId","removeUndefined","saveRole","roleData","deleteUser","deleteRole","defineRolesFor","mgmtUser","authenticator","console","warn","userRoles","some","userRoleIds","setUserRoles","getUser","log","docs","doc","newVar","updated_on","UserManagementContext","createContext","UserManagementProvider","t0","$","_c","children","userManagement","t1","useUserManagement","useContext","RoleChip","colorScheme","getColorSchemeForSeed","name","Chip","RoleYupSchema","Yup","object","shape","string","required","canRoleBeEdited","loggedUser","loggedUserIsAdmin","RolesDetailsForm","open","editable","handleClose","collections","isNewRole","loggedInUser","useAuthController","savingError","setSavingError","role_0","onRoleUpdated","t2","t3","role_1","formexController","resetForm","e_0","t4","Promise","resolve","initialValues","onSubmit","validation","_temp3","formex","useCreateFormex","isSubmitting","touched","values_0","errors","errors_0","handleChange","setFieldValue","dirty","setFieldTouched","defaultCreate","defaultRead","defaultEdit","defaultDelete","t5","idTouched","getIn","toSnakeCase","t6","t7","t8","Symbol","for","display","flexDirection","position","height","DialogTitle","t9","t10","t11","TextField","t12","t13","jsx","FieldCaption","t14","jsxs","t15","t16","t17","e_2","t18","t19","t20","t21","t22","TableHeader","TableCell","t23","t24","t25","t26","checked","t27","Tooltip","Checkbox","t28","t29","t30","checked_0","t31","t32","t33","t34","checked_1","t35","t36","t37","t38","checked_2","t39","t40","t41","TableRow","t42","col","checked_3","checked_4","checked_5","checked_6","Button","t43","Paper","Table","TableBody","t44","t45","t46","config","t47","t48","event","target","value","t49","createCollections","t50","t51","SelectItem","t52","Select","_temp4","t53","t54","t55","t56","t57","t58","event_0","t59","editCollections","t60","t61","t62","t63","_temp5","t64","t65","t66","t67","t68","t69","event_1","t70","deleteCollections","t71","t72","t73","t74","_temp6","t75","t76","t77","t78","DialogContent","t79","Typography","message","t80","t81","t82","CheckIcon","t83","t84","LoadingButton","t85","DialogActions","t86","handleSubmit","t87","Formex","t88","Dialog","value_1","value_0","validate","abortEarly","_temp","_temp2","e_1","inner","forEach","DEFAULT_ROLES","RolesTable","onRoleClicked","roleToBeDeleted","setRoleToBeDeleted","deleteInProgress","setDeleteInProgress","canCreateAll","canReadAll","canUpdateAll","canDeleteAll","width","IconButton","stopPropagation","DeleteIcon","CenteredView","finally","ConfirmationDialog","RolesView","memo","useNavigationController","dialogOpen","setDialogOpen","selectedRole","setSelectedRole","AddIcon","Container","UserYupSchema","displayName","array","min","canUserBeEdited","prevUser","admins","didRolesChange","adminRoleRemoved","UserDetailsForm","userProp","snackbarController","useSnackbarController","isNewUser","savedUser","reject","onUserUpdated","type","submitCount","open_0","r_1","_temp7","MultiSelect","userRole","MultiSelectItem","r_0","acc","UsersTable","onUserClicked","customizationController","useCustomizationController","dateUtilsLocale","locale","locales","dateFormat","dateTimeFormat","defaultDateFormat","userToBeDeleted","setUserToBeDeleted","formattedDate","format","photoURL","providerId","isAnonymous","error_0","UsersView","selectedUser","setSelectedUser","useUserManagementPlugin","noUsers","noRoles","additionalChildrenStart","Component","props","homePage","provider","IntroWidget","buttonLabel","userManagementAdminViews","group","icon","view"],"mappings":"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"}