@dotevolve/core
v1.0.0
Published
Shared types, RBAC helpers, and React authorization primitives for the DotEvolve ecosystem
Readme
@dotevolve/core
Shared types, RBAC helpers, and React authorization primitives for the DotEvolve ecosystem.
Installation
npm install @dotevolve/coreSubpath Exports
@dotevolve/core (Types)
Shared TypeScript interfaces and enums:
Role- String enum:SUPER_ADMIN,TENANT_ADMIN,USERPermission- String enum with 16 namespaced permissionsUser,TenantClaim,AppMetadata- User-related interfacesApiResponse<T>,PaginatedResponse<T>- API response interfaces
@dotevolve/core/auth (Auth)
RBAC constants and helper functions:
ROLE_PERMISSIONS- Maps each Role to its set of PermissionsSYSTEM_ROLES- Convenience constants for Role valueshasPermission(role, permission)- Check if a role has a permissionhasAnyPermission(role, permissions)- Check if a role has at least one permissionhasAllPermissions(role, permissions)- Check if a role has all permissions
@dotevolve/core/react (React)
React hooks and components for authorization:
useAuthorization(sessionOverride?)- Hook to read authorization stateRequirePermission- Component to conditionally render based on permissions
Usage Examples
RBAC Helpers
import {
Role,
Permission,
hasPermission,
hasAnyPermission,
hasAllPermissions,
} from "@dotevolve/core/auth";
// Check if a role has a specific permission
const canViewUsers = hasPermission(Role.TENANT_ADMIN, Permission.USERS_VIEW); // true
const canCreateUsers = hasPermission(Role.USER, Permission.USERS_CREATE); // false
// Check if a role has any of multiple permissions
const canManage = hasAnyPermission(Role.TENANT_ADMIN, [
Permission.USERS_CREATE,
Permission.TENANTS_CREATE,
]); // true
// Check if a role has all of multiple permissions
const canEdit = hasAllPermissions(Role.TENANT_ADMIN, [
Permission.USERS_VIEW,
Permission.USERS_UPDATE,
]); // trueReact Hook
import { useAuthorization, Permission } from "@dotevolve/core/react";
function UserProfile() {
const { activeRole, hasPermission } = useAuthorization();
if (!activeRole) {
return <div>Loading...</div>;
}
return (
<div>
<p>Role: {activeRole}</p>
{hasPermission(Permission.USERS_VIEW) && <div>User Management</div>}
</div>
);
}RequirePermission Component
import { RequirePermission, Permission } from "@dotevolve/core/react";
function AdminPanel() {
return (
<div>
<RequirePermission permission={Permission.USERS_CREATE}>
<button>Create User</button>
</RequirePermission>
<RequirePermission
permission={[Permission.USERS_VIEW, Permission.USERS_UPDATE]}
fallback={<div>Access Denied</div>}
>
<div>User Management Panel</div>
</RequirePermission>
</div>
);
}License
ISC
