Access Control Library

Enterprise-grade access control system with role-based permissions, group inheritance, and extensible validation

Configuration

Current Role:
Current Group:

Group Hierarchy

Admin Group Full permissions
Content Group Inherits from Admin Group

Live Demo

Component Access Control

Admin Panel Component

Status: Access denied

Content Editor Component

Status: Access denied

Permission Breakdown

Base Role Permissions:
Group Inheritance:
Admin Panel Effective Permissions: ,

Demo Code Examples

Create Roles and Groups

import { createRole, createGroup } from 'permit-core';

const adminRole = createRole('admin');
const editorRole = createRole('editor');
const viewerRole = createRole('viewer');

const roles = [adminRole, editorRole, viewerRole];

const adminGroup = createGroup('admin');
const contentGroup = createGroup('content', adminGroup);

const groups = [adminGroup, contentGroup];

Define Component Permissions (Roles & Groups)

import { createComponentPermission } from 'permit-core';

const groupPermissions = {
  [adminGroup.getCode()]: {
    component: createComponentPermission(adminGroup, [{
      identifier: /.*/,
      actions: ['view', 'edit']
    }])
  },
  [contentGroup.getCode()]: {
    component: createComponentPermission(contentGroup, [{
      identifier: 'admin-panel',
      actions: ['edit'],
      exclude: true
    }, {
      identifier: 'content-panel',
      actions: ['view', 'edit']
    }])
  }
};

const rolePermissions = {
  [adminRole.getCode()]: {
    component: createComponentPermission(adminRole, [{
      identifier: /.*/,
      actions: ['view', 'edit']
    }])
  },
  [editorRole.getCode()]: {
    component: createComponentPermission(editorRole, [{
      identifier: 'admin-panel',
      actions: ['view']
    }, {
      identifier: 'content-panel',
      actions: ['view', 'edit']
    }])
  },
  [viewerRole.getCode()]: {
    component: createComponentPermission(viewerRole, [{
      identifier: 'content-panel',
      actions: ['view']
    }])
  }
};

Using ComponentAccessControl in Svelte

<script lang="ts">
  import AccessControlProvider from '$lib/AccessControlProvider.svelte';
  import ComponentAccessControl from '$lib/ComponentAccessControl.svelte';
  import { user } from '$stores/user.store';

  // roles, groups, rolePermissions, groupPermissions defined above
</script>

<AccessControlProvider {roles} {groups} account={user}>
  <ComponentAccessControl identifier="admin-panel">
    {#snippet children({ isEditable })}
      <button class="btn" disabled={!isEditable}>Edit Settings</button>
    {/snippet}
    {#snippet fallback()}
      <p>Access denied</p>
    {/snippet}
  </ComponentAccessControl>
</AccessControlProvider>

Access Control Library Demo | All Features Implementation

Demonstrating component, dropdown, menu, and route access controls with group inheritance