Drago Authorization is a simple and dynamic access control list (ACL) management system built on top of the Nette Framework. It provides an easy-to-use solution for managing roles, resources, and permissions, with built-in support for PHP 8.3 or higher.
- PHP 8.3 or higher
- Bootstrap
- composer
composer require drago-ex/authorization
To use Drago Authorization in your Nette application, register the extension in your config.neon
file:
extensions:
- Drago\Authorization\DI\AuthorizationExtension
You can use the Authorization
trait in your base presenter to manage access control and redirect users to the login page if needed.
use Drago\Authorization\Authorization
// Redirect to a specific login presenter or module
private string $loginLink = ':Module:Presenter:';
In each presenter, use the AuthorizationControl
trait to manage authorization control.
use Drago\Authorization\Control\AuthorizationControl
Here’s how to create and configure the main components for managing roles, permissions, and resources:
// Minimum configuration to create components.
protected function createComponentPermissionsControl(): PermissionsControl
{
return $this->permissionsControl;
}
protected function createComponentRolesControl(): RolesControl
{
return $this->rolesControl;
}
protected function createComponentResourcesControl(): ResourcesControl
{
return $this->resourcesControl;
}
protected function createComponentPrivilegesControl(): PrivilegesControl
{
return $this->privilegesControl;
}
protected function createComponentAccessControl(): AccessControl
{
return $this->accessControl;
}
You can also configure custom templates for the components:
// Set custom templates for controls
$control->templateControl = __DIR__ . '/path/to/file.latte';
$control->templateGrid = __DIR__ . '/path/to/file.latte';
// Insert a translator for multi-language support
$control->translator = $this->getTranslator();
Once the components are configured, you can render them in your Latte templates:
{control permissionsControl}
{control rolesControl}
{control resourcesControl}
{control privilegesControl}
{control accessControl}