New:Microsoft Teams Notifications Are Now Available in Socket.Learn more
Get Started

@abpjs/permission-management

Package Overview
Dependencies
Maintainers
1
Versions
15
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@abpjs/permission-management

ABP Framework permission-management components for React - translated from @abp/ng.permission-management

Source
npmnpm
Version
2.2.0
Version published
Weekly downloads
18
-43.75%
Maintainers
1
Weekly downloads
 
Created
Source

@abpjs/permission-management

Permission management UI components for ABP Framework in React

npm version License: LGPL-3.0

Overview

@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.

Features

  • Permission Modal - Ready-to-use modal dialog for managing permissions
  • Role Permissions - Manage permissions for roles
  • User Permissions - Manage permissions for individual users
  • Permission Groups - Organized permission display by groups
  • Bulk Operations - Grant or revoke multiple permissions at once
  • Real-time Updates - Instant UI feedback on permission changes
  • Chakra UI - Beautiful, accessible components
  • TypeScript - Full type safety with comprehensive definitions

Installation

# Using npm
npm install @abpjs/permission-management

# Using yarn
yarn add @abpjs/permission-management

# Using pnpm
pnpm add @abpjs/permission-management

Required Dependencies

This package requires the following peer dependencies:

npm install @abpjs/core @abpjs/theme-shared @chakra-ui/react @emotion/react @emotion/styled framer-motion

Quick Start

Basic Usage with Permission Modal

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>
  );
}

Managing User Permissions

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}
      />
    </>
  );
}

Components

PermissionManagementModal

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:

PropTypeDescription
isOpenbooleanControls modal visibility
onClose() => voidCallback when modal is closed
providerNamestringPermission provider type ("R" for Role, "U" for User)
providerKeystringThe identifier of the role or user
onSave() => voidOptional callback after permissions are saved

Hooks

usePermissionManagement

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>
  );
}

Services

PermissionManagementService

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 },
  ],
});

Permission Providers

ABP uses different provider types for different permission subjects:

ProviderKeyDescription
RRolePermissions for roles
UUserPermissions for specific users
CClientPermissions for OAuth clients

Data Models

PermissionGroup

interface PermissionGroup {
  name: string;
  displayName: string;
  permissions: Permission[];
}

Permission

interface Permission {
  name: string;
  displayName: string;
  isGranted: boolean;
  allowedProviders: string[];
  grantedProviders: GrantedProvider[];
}

Integration Example

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}
      />
    </>
  );
}

Customization

Custom Permission Display

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>
  );
}

Contributing

This package is part of the ABP React monorepo. Contributions are welcome!

License

LGPL-3.0 - See LICENSE for details.

View Full Documentation | Report Issues | View Source

Keywords

abp

FAQs

Package last updated on 01 Feb 2026

Related posts