policy.js (1347B)
1 export function isRealmAdmin(roles) { 2 return Array.isArray(roles) && roles.includes('realm-admin'); 3 } 4 5 export function isSystemAdmin(user) { 6 return Boolean(user?.is_system_admin); 7 } 8 9 export function canUseClient({ user, membership, roles, client, realm }) { 10 if (!user || user.status !== 'active') return false; 11 if (!client || !client.enabled) return false; 12 13 const requiredRoles = Array.isArray(client.required_roles) ? client.required_roles : []; 14 const roleOk = requiredRoles.length === 0 || requiredRoles.some((role) => roles.includes(role)); 15 16 if (client.virtual && client.client_id === 'admin') { 17 if (isSystemAdmin(user)) return true; 18 return Boolean(membership && membership.status === 'active' && roles.includes('realm-admin')); 19 } 20 21 if (client.access_mode === 'public') return true; 22 23 if (!membership || membership.status !== 'active') return false; 24 25 if (client.access_mode === 'internal') { 26 return user.home_realm_id === realm.id && roleOk; 27 } 28 29 if (client.access_mode === 'members') { 30 return roleOk; 31 } 32 33 return false; 34 } 35 36 export function canManageUser({ actorRoles, actorIsSystemAdmin, target, realmId }) { 37 if (actorIsSystemAdmin) return 'full'; 38 if (!isRealmAdmin(actorRoles)) return null; 39 if (!target) return null; 40 if (target.home_realm_id === realmId) return 'full'; 41 return 'membership'; 42 }