
Research
/Security News
PolinRider Spreads Through Compromised GitHub Accounts and Packagist
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.
@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 16 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.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.

Security News
GitHub Actions now supports cache-mode, a least-privilege control on the Actions cache aimed at the cache poisoning technique behind recent compromises.

Company News
Allow myself to introduce... myself.