drago-ex/project-permission

Component for managing user permissions in a Drago project.

Maintainers

Package info

github.com/drago-ex/project-permission

Type:drago-project-resource

pkg:composer/drago-ex/project-permission

Statistics

Installs: 14

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-05-07 07:54 UTC

This package is auto-updated.

Last update: 2026-05-07 07:55:05 UTC


README

Component for ACL and permission management in a Drago / Nette project.

License: MIT PHP version

Requirements

  • PHP >= 8.3
  • Nette Framework
  • Composer
  • Bootstrap
  • Naja
  • Node.js
  • Drago Project core packages

What it does

  • manages roles
  • assigns multiple roles to users
  • manages resource + privilege records
  • allows role permissions to be toggled in the admin UI
  • builds a Nette Permission ACL from registered providers and database data

The package ships with an admin section for:

  • Users - assign roles to existing users
  • Roles - create, edit and delete custom roles
  • Permissions - allow or deny access for a selected role

System roles such as admin, user and guest are handled as protected base roles.

Installation

composer require drago-ex/project-permission

After installation, run the package migrations, load the provided service configuration, register the Naja extension from assets/permission-toggle.js and include styles from assets/permission-togle.scss.

Example:

import naja from 'naja';
import PermissionToggle from 'drago-ex/project-permission/assets/permission-toggle';

naja.registerExtension(new PermissionToggle());

Database

The package works with these tables:

  • roles
  • users_roles
  • resources
  • authorization

Seed migrations also add default roles and AccessControl permissions for the backend module.

Integration with project-auth

In UserRepository fill in the body of the prepared getRolesByUser() method:

public function getRolesByUser(int $userId): array
{
    return $this->getConnection()
        ->select('r.*')->from(RolesEntity::Table)->as('r')
        ->innerJoin(UsersRolesEntity::Table)->as('ur')->on('ur.role_id = r.id')
        ->where('ur.%n = ?', UsersRolesEntity::ColumnUserId, $userId)
        ->fetchPairs(RolesEntity::PrimaryKey, RolesEntity::ColumnName);
}