Skip to main content
Version: 0.7.6

Permission Modal

The PermissionManagementModal provides a UI for managing permissions for roles, users, or clients.

Basic Usage

import { PermissionManagementModal } from '@abpjs/permission-management';
import { useState } from 'react';

function PermissionManager() {
const [isOpen, setIsOpen] = useState(false);

return (
<>
<button onClick={() => setIsOpen(true)}>
Manage Permissions
</button>

<PermissionManagementModal
isOpen={isOpen}
onClose={() => setIsOpen(false)}
providerName="R"
providerKey="admin"
onSave={() => console.log('Permissions saved')}
/>
</>
);
}

Props

PropTypeRequiredDescription
isOpenbooleanYesWhether the modal is open
onClose() => voidYesCalled when modal closes
providerName'R' | 'U' | 'C'YesPermission provider type
providerKeystringYesProvider identifier (role name, user ID, etc.)
onSave() => voidNoCalled after permissions are saved

Provider Types

Role Permissions (R)

Manage permissions for a role:

<PermissionManagementModal
isOpen={isOpen}
onClose={onClose}
providerName="R"
providerKey="admin" // Role name
/>

User Permissions (U)

Manage permissions for a specific user:

<PermissionManagementModal
isOpen={isOpen}
onClose={onClose}
providerName="U"
providerKey="3fa85f64-5717-4562-b3fc-2c963f66afa6" // User ID
/>

Client Permissions (C)

Manage permissions for an OAuth client:

<PermissionManagementModal
isOpen={isOpen}
onClose={onClose}
providerName="C"
providerKey="MyApp_Web" // Client ID
/>

Integration with Identity

Use with the identity package to manage user/role permissions:

import { useRoles } from '@abpjs/identity';
import { PermissionManagementModal } from '@abpjs/permission-management';
import { useState } from 'react';

function RolesWithPermissions() {
const { roles } = useRoles();
const [selectedRole, setSelectedRole] = useState<string | null>(null);

return (
<div>
<h2>Roles</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{roles.map((role) => (
<tr key={role.id}>
<td>{role.name}</td>
<td>
<button onClick={() => setSelectedRole(role.name)}>
Permissions
</button>
</td>
</tr>
))}
</tbody>
</table>

<PermissionManagementModal
isOpen={!!selectedRole}
onClose={() => setSelectedRole(null)}
providerName="R"
providerKey={selectedRole || ''}
/>
</div>
);
}

usePermissionManagement Hook

For custom permission management UI:

import { usePermissionManagement } from '@abpjs/permission-management';

function CustomPermissionUI() {
const {
permissions,
loading,
togglePermission,
grantAll,
revokeAll,
save,
} = usePermissionManagement('R', 'admin');

if (loading) return <p>Loading...</p>;

return (
<div>
<button onClick={grantAll}>Grant All</button>
<button onClick={revokeAll}>Revoke All</button>

{permissions.map((group) => (
<div key={group.name}>
<h3>{group.displayName}</h3>
{group.permissions.map((permission) => (
<label key={permission.name}>
<input
type="checkbox"
checked={permission.isGranted}
onChange={() => togglePermission(permission.name)}
/>
{permission.displayName}
</label>
))}
</div>
))}

<button onClick={save}>Save</button>
</div>
);
}