
Security News
/Company News
Socket Is Sponsoring Composer and Packagist
Socket has joined the new Composer and Packagist sponsorship program as a launch sponsor, supporting the team that keeps PHP's package ecosystem secure.
@abpjs/permission-management
Advanced tools
ABP Framework permission-management components for React - translated from @abp/ng.permission-management
Permission management UI components for ABP Framework in React
@abpjs/permission-management provides a complete permission management interface for ABP-based React applications. It allows administrators to view, grant, and revoke permissions for users, roles, and other permission providers through a user-friendly modal interface.
This package is a React translation of the original @abp/ng.permission-management Angular package, offering the same powerful permission management capabilities with modern React patterns.
# Using npm
npm install @abpjs/permission-management
# Using yarn
yarn add @abpjs/permission-management
# Using pnpm
pnpm add @abpjs/permission-management
This package requires the following peer dependencies:
npm install @abpjs/core @abpjs/theme-shared @chakra-ui/react @emotion/react @emotion/styled framer-motion
import { useState } from 'react';
import { PermissionManagementModal } from '@abpjs/permission-management';
import { Button } from '@chakra-ui/react';
function RoleManagement() {
const [isOpen, setIsOpen] = useState(false);
const [selectedRole, setSelectedRole] = useState(null);
const openPermissions = (role) => {
setSelectedRole(role);
setIsOpen(true);
};
return (
<div>
<Button onClick={() => openPermissions({ id: 'role-id', name: 'admin' })}>
Manage Permissions
</Button>
<PermissionManagementModal
isOpen={isOpen}
onClose={() => setIsOpen(false)}
providerName="R" // R for Role
providerKey={selectedRole?.id}
/>
</div>
);
}
import { PermissionManagementModal } from '@abpjs/permission-management';
function UserPermissions({ userId }) {
const [isOpen, setIsOpen] = useState(false);
return (
<>
<Button onClick={() => setIsOpen(true)}>
Edit User Permissions
</Button>
<PermissionManagementModal
isOpen={isOpen}
onClose={() => setIsOpen(false)}
providerName="U" // U for User
providerKey={userId}
/>
</>
);
}
The main component for displaying and managing permissions.
import { PermissionManagementModal } from '@abpjs/permission-management';
<PermissionManagementModal
isOpen={isOpen}
onClose={handleClose}
providerName="R"
providerKey="admin-role-id"
onSave={handleSave}
/>
Props:
| Prop | Type | Description |
|---|---|---|
isOpen | boolean | Controls modal visibility |
onClose | () => void | Callback when modal is closed |
providerName | string | Permission provider type ("R" for Role, "U" for User) |
providerKey | string | The identifier of the role or user |
onSave | () => void | Optional callback after permissions are saved |
Hook for accessing permission management functionality programmatically.
import { usePermissionManagement } from '@abpjs/permission-management';
function CustomPermissionUI() {
const {
permissions,
isLoading,
error,
getPermissions,
updatePermissions,
} = usePermissionManagement();
useEffect(() => {
getPermissions({
providerName: 'R',
providerKey: 'admin',
});
}, []);
const handleToggle = async (permissionName, isGranted) => {
await updatePermissions({
providerName: 'R',
providerKey: 'admin',
permissions: {
[permissionName]: isGranted,
},
});
};
if (isLoading) return <Spinner />;
if (error) return <ErrorMessage error={error} />;
return (
<div>
{permissions.groups.map(group => (
<PermissionGroup
key={group.name}
group={group}
onToggle={handleToggle}
/>
))}
</div>
);
}
Service class for direct API interaction.
import { PermissionManagementService } from '@abpjs/permission-management';
// Get permissions for a role
const permissions = await PermissionManagementService.get({
providerName: 'R',
providerKey: 'admin-role-id',
});
// Update permissions
await PermissionManagementService.update({
providerName: 'R',
providerKey: 'admin-role-id',
permissions: [
{ name: 'MyApp.Users.Create', isGranted: true },
{ name: 'MyApp.Users.Delete', isGranted: false },
],
});
ABP uses different provider types for different permission subjects:
| Provider | Key | Description |
|---|---|---|
R | Role | Permissions for roles |
U | User | Permissions for specific users |
C | Client | Permissions for OAuth clients |
interface PermissionGroup {
name: string;
displayName: string;
permissions: Permission[];
}
interface Permission {
name: string;
displayName: string;
isGranted: boolean;
allowedProviders: string[];
grantedProviders: GrantedProvider[];
}
Complete example integrating with role management:
import { useState } from 'react';
import { usePermission } from '@abpjs/core';
import { PermissionManagementModal } from '@abpjs/permission-management';
import {
Table,
Button,
IconButton,
useDisclosure
} from '@chakra-ui/react';
import { SettingsIcon } from '@chakra-ui/icons';
function RolesTable({ roles }) {
const { hasPermission } = usePermission();
const { isOpen, onOpen, onClose } = useDisclosure();
const [selectedRole, setSelectedRole] = useState(null);
const canManagePermissions = hasPermission('AbpIdentity.Roles.ManagePermissions');
const handleManagePermissions = (role) => {
setSelectedRole(role);
onOpen();
};
return (
<>
<Table>
<thead>
<tr>
<th>Role Name</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{roles.map(role => (
<tr key={role.id}>
<td>{role.name}</td>
<td>
{canManagePermissions && (
<IconButton
aria-label="Manage permissions"
icon={<SettingsIcon />}
onClick={() => handleManagePermissions(role)}
/>
)}
</td>
</tr>
))}
</tbody>
</Table>
<PermissionManagementModal
isOpen={isOpen}
onClose={onClose}
providerName="R"
providerKey={selectedRole?.id}
/>
</>
);
}
Create your own permission display component:
import { usePermissionManagement } from '@abpjs/permission-management';
import { Checkbox, VStack, Heading } from '@chakra-ui/react';
function CustomPermissionList({ providerName, providerKey }) {
const { permissions, updatePermissions } = usePermissionManagement();
const handleChange = async (permissionName, isGranted) => {
await updatePermissions({
providerName,
providerKey,
permissions: [{ name: permissionName, isGranted }],
});
};
return (
<VStack align="stretch" spacing={4}>
{permissions?.groups.map(group => (
<div key={group.name}>
<Heading size="sm">{group.displayName}</Heading>
{group.permissions.map(permission => (
<Checkbox
key={permission.name}
isChecked={permission.isGranted}
onChange={(e) => handleChange(permission.name, e.target.checked)}
>
{permission.displayName}
</Checkbox>
))}
</div>
))}
</VStack>
);
}
This package is part of the ABP React monorepo. Contributions are welcome!
LGPL-3.0 - See LICENSE for details.
FAQs
ABP Framework permission-management components for React - translated from @abp/ng.permission-management
The npm package @abpjs/permission-management receives a total of 43 weekly downloads. As such, @abpjs/permission-management popularity was classified as not popular.
We found that @abpjs/permission-management demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
/Company News
Socket has joined the new Composer and Packagist sponsorship program as a launch sponsor, supporting the team that keeps PHP's package ecosystem secure.

Research
/Security News
Benign-looking npm packages split malicious functionality across a dependency chain that deploys a cross-platform RAT targeting Alibaba developers.

Research
/Security News
Two Joyfill npm beta releases contain an import-time implant that uses blockchain transactions to retrieve a remote-access trojan.