UNPKG

@frank-auth/react

Version:

Flexible and customizable React UI components for Frank Authentication

4 lines (3 loc) 6.75 kB
'use client'; "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("react/jsx-runtime"),n=require("react"),X=require("./use-auth.cjs"),H={CREATE:"create",READ:"read",UPDATE:"update",DELETE:"delete",INVITE:"invite",REMOVE:"remove",SUSPEND:"suspend",ACTIVATE:"activate",MANAGE:"manage",CONFIGURE:"configure",AUDIT:"audit",TRANSFER:"transfer",EXPORT:"export",IMPORT:"import"},J={USER:"user",USER_PROFILE:"user:profile",USER_SESSION:"user:session",USER_MFA:"user:mfa",ORGANIZATION:"organization",ORGANIZATION_SETTINGS:"organization:settings",ORGANIZATION_MEMBERS:"organization:members",ORGANIZATION_INVITATIONS:"organization:invitations",ORGANIZATION_BILLING:"organization:billing",ORGANIZATION_AUDIT:"organization:audit",APPLICATION:"application",APPLICATION_SETTINGS:"application:settings",APPLICATION_USERS:"application:users",APPLICATION_SESSIONS:"application:sessions",SYSTEM:"system",SYSTEM_USERS:"system:users",SYSTEM_ORGANIZATIONS:"system:organizations",SYSTEM_SETTINGS:"system:settings",SYSTEM_BILLING:"system:billing",SYSTEM_AUDIT:"system:audit"},R={SUPER_ADMIN:"system:super_admin",ADMIN:"system:admin",SUPPORT:"system:support"},k={OWNER:"organization:owner",ADMIN:"organization:admin",MEMBER:"organization:member",BILLING:"organization:billing",SUPPORT:"organization:support"};function M(){const{user:o,activeOrganization:i,sdk:u}=X.useAuth(),[S,l]=n.useState([]),[d,P]=n.useState([]),[a,A]=n.useState([]),[p,T]=n.useState([]),[O,N]=n.useState(!1),[h,m]=n.useState(null),[E,U]=n.useState({type:"system",organizationId:i?.id}),w=n.useCallback(e=>{const s={code:e.code||"UNKNOWN_ERROR",message:e.message||"An unknown error occurred",details:e.details,field:e.field};m(s)},[]),z=n.useCallback(async()=>{if(!(!u.auth||!o))try{N(!0),m(null);const[e,s]=await Promise.all([u.auth.getUserRoles(o.id),u.auth.getUserPermissions(o.id)]);A(e),T(s);const t=e.map(r=>r.role.name),g=s.map(r=>r.permission.name),G=e.flatMap(r=>r.role.permissions?.map(y=>y.name)||[]);P(t),l([...new Set([...g,...G])])}catch(e){w(e)}finally{N(!1)}},[u.auth,o,w]);n.useEffect(()=>{z()},[z]),n.useEffect(()=>{i&&U(e=>({...e,organizationId:i.id}))},[i]);const c=n.useCallback((e,s)=>{const t=s||E;return p.some(r=>{if(r.permission.name!==e)return!1;switch(t.type){case"system":return r.contextType==="system";case"organization":return r.contextType==="organization"&&r.resourceId===t.organizationId;case"application":return r.contextType==="application"&&r.resourceId===t.applicationId;default:return!1}})?!0:a.some(r=>{let y=!1;switch(t.type){case"system":y=r.contextType==="system";break;case"organization":y=r.contextType==="organization"&&r.resourceId===t.organizationId;break;case"application":y=r.contextType==="application"&&r.resourceId===t.applicationId;break}return y&&r.role.permissions?.some(K=>K.name===e)||!1})},[p,a,E]),I=n.useCallback((e,s)=>{const t=s||E;return a.some(g=>{if(g.role.name!==e)return!1;switch(t.type){case"system":return g.contextType==="system";case"organization":return g.contextType==="organization"&&g.resourceId===t.organizationId;case"application":return g.contextType==="application"&&g.resourceId===t.applicationId;default:return!1}})},[a,E]),b=n.useCallback((e,s)=>e.some(t=>c(t,s)),[c]),C=n.useCallback((e,s)=>e.every(t=>c(t,s)),[c]),x=n.useCallback((e,s,t)=>{const g=`${s}:${e}`;return c(g,t)},[c]),D=n.useCallback((e,s)=>{const t=s||i?.id;return t?c(e,{type:"organization",organizationId:t}):!1},[c,i]),L=n.useCallback((e,s)=>c(e,{type:"application",applicationId:s}),[c]),q=n.useCallback(e=>c(e,{type:"system"}),[c]),v=n.useMemo(()=>I(R.SUPER_ADMIN)||I(R.ADMIN),[I]),_=n.useCallback(e=>{const s=e||i?.id;return s?I(k.OWNER,{type:"organization",organizationId:s}):!1},[I,i]),Z=n.useCallback(e=>{const s=e||i?.id;return s?I(k.ADMIN,{type:"organization",organizationId:s})||_(s):!1},[I,_,i]),Y=n.useCallback(e=>{const s=e||i?.id;return s?a.some(t=>t.contextType==="organization"&&t.resourceId===s):!1},[a,i]),B=n.useCallback((e,s)=>{if(!c(e,s))throw new Error(`Permission required: ${e}`)},[c]),j=n.useCallback((e,s)=>{if(!I(e,s))throw new Error(`Role required: ${e}`)},[I]),F=n.useCallback((e,s)=>{if(!b(e,s))throw new Error(`One of these permissions required: ${e.join(", ")}`)},[b]),V=n.useCallback((e,s)=>{if(!C(e,s))throw new Error(`All of these permissions required: ${e.join(", ")}`)},[C]),$=n.useCallback(async()=>{await z()},[z]),W=n.useCallback(e=>{U(e)},[]);return{permissions:S,roles:d,roleAssignments:a,permissionAssignments:p,isLoaded:!!o,isLoading:O,error:h,hasPermission:c,hasRole:I,hasAnyPermission:b,hasAllPermissions:C,can:x,canInOrganization:D,canInApplication:L,hasSystemPermission:q,isSystemAdmin:v,isOrganizationOwner:_,isOrganizationAdmin:Z,isOrganizationMember:Y,refreshPermissions:$,requirePermission:B,requireRole:j,requireAnyPermission:F,requireAllPermissions:V,currentContext:E,setContext:W}}function Q(o){const{canInOrganization:i,isOrganizationOwner:u,isOrganizationAdmin:S,isOrganizationMember:l,hasRole:d,activeOrganization:P}=M(),a=o||P?.id;return{organizationId:a,isOwner:u(a),isAdmin:S(a),isMember:l(a),canManageMembers:i("organization:members:manage",a),canInviteMembers:i("organization:members:invite",a),canRemoveMembers:i("organization:members:remove",a),canManageSettings:i("organization:settings:manage",a),canManageBilling:i("organization:billing:manage",a),canViewAudit:i("organization:audit:read",a),canDeleteOrganization:i("organization:delete",a),hasOrganizationRole:A=>d(A,{type:"organization",organizationId:a})}}function ee(){const{hasSystemPermission:o,isSystemAdmin:i,hasRole:u,userType:S}=M(),l=S==="internal";return{canAccessSystem:l,isSystemAdmin:i,canManageUsers:l&&o("system:users:manage"),canManageOrganizations:l&&o("system:organizations:manage"),canManageSystem:l&&o("system:manage"),canViewSystemAudit:l&&o("system:audit:read"),canManageBilling:l&&o("system:billing:manage"),hasSystemRole:d=>u(d,{type:"system"}),isSuperAdmin:u(R.SUPER_ADMIN,{type:"system"}),isSupport:u(R.SUPPORT,{type:"system"})}}function se(){const{hasPermission:o,hasRole:i,hasAnyPermission:u,hasAllPermissions:S,requirePermission:l,requireRole:d}=M();return{PermissionGuard:n.useCallback(({permission:a,role:A,anyPermissions:p,allPermissions:T,context:O,fallback:N=null,children:h})=>{let m=!0;return a&&(m=m&&o(a,O)),A&&(m=m&&i(A,O)),p&&(m=m&&u(p,O)),T&&(m=m&&S(T,O)),m?f.jsx(f.Fragment,{children:h}):f.jsx(f.Fragment,{children:N})},[o,i,u,S]),requirePermission:l,requireRole:d}}exports.ORGANIZATION_ROLES=k;exports.PERMISSION_ACTIONS=H;exports.PERMISSION_RESOURCES=J;exports.SYSTEM_ROLES=R;exports.useOrganizationPermissions=Q;exports.usePermissionGuard=se;exports.usePermissions=M;exports.useSystemPermissions=ee; //# sourceMappingURL=use-permissions.cjs.map