Рубрики
Uncategorized

Авторизация Laravel: библиотека авторизации, поддерживающая ACL, RBAC, ABAC и другие модели

Автор оригинала: David Wong.

Основываясь на caspian, laravel авторизация-это библиотека авторизации, которая поддерживает доступ к нескольким моделям управления доступом (таким как ACL, RBAC, ABAC и т.д.). Перед этим вам нужно понять Кабина

устанавливать

Использование Композитор Установка:

composer require casbin/laravel-authz

Lauthz\LauthzServiceProvider да автоматически обнаружен По умолчанию, но если вы хотите зарегистрироваться, вы можете config/app. php Добавить ServiceProvider :

'providers' => [
    /*
     * Package Service Providers...
     */
    Lauthz\LauthzServiceProvider::class,
]

Исполнитель фасад Также автоматически обнаружен , но если вы хотите добавить его вручную, в config/app.php Добавить в:

'aliases' => [
    // ...
    'Enforcer' => Lauthz\Facades\Enforcer::class,
]

Чтобы опубликовать конфигурацию, запустите поставщик:опубликовать Заказать:

php artisan vendor:publish

Это автоматически создается Модель файл конфигурации config/auth- rbac -model.conf И новый Authz файл конфигурации config/lauthz.php

Чтобы перенести миграцию, выполните команду migrate:

php artisan migrate

Это создаст правила Технический паспорт.

использование

Быстрый старт

После установки вы можете выполнить следующие действия:

use Enforcer;

// adds permissions to a user
Enforcer::addPermissionForUser('eve', 'articles', 'read');
// adds a role for a user.
Enforcer::addRoleForUser('eve', 'writer');
// adds permissions to a rule
Enforcer::addPolicy('writer', 'articles','edit');

Вы можете проверить права пользователя следующим образом:

// to check if a user has permission
if (Enforcer::enforce("eve", "articles", "edit")) {
    // permit eve to edit articles
} else {
    // deny the request, show an error
}

Использование API enforcer

Он предоставляет очень богатый API Для продвижения Политики Операций:

Получить все роли:

Enforcer::getAllRoles(); // ['writer', 'reader']

Получить правила авторизации для всех ролей:

Enforcer::getPolicy();

Получить все роли для пользователя:

Enforcer::getRolesForUser('eve'); // ['writer']

Получить всех пользователей для роли:

Enforcer::getUsersForRole('writer'); // ['eve']

Определите, есть ли у пользователя роль:

Enforcer::hasRoleForUser('eve', 'writer'); // true or false

Чтобы добавить роль пользователю:

Enforcer::addRoleForUser('eve', 'writer');

Чтобы предоставить разрешение пользователю или роли:

// to user
Enforcer::addPermissionForUser('eve', 'articles', 'read');
// to role
Enforcer::addPermissionForUser('writer', 'articles','edit');

Чтобы удалить роль пользователя:

Enforcer::deleteRoleForUser('eve', 'writer');

Чтобы удалить все роли для пользователя:

Enforcer::deleteRolesForUser('eve');

Чтобы удалить одну роль:

Enforcer::deleteRole('writer');

Удалить разрешение:

Enforcer::deletePermission('articles', 'read'); // returns false if the permission does not exist (aka not affected).

Чтобы удалить разрешения для пользователя или роли:

Enforcer::deletePermissionForUser('eve', 'articles', 'read');

Удалите все разрешения для пользователя или роли:

// to user
Enforcer::deletePermissionsForUser('eve');
// to role
Enforcer::deletePermissionsForUser('writer');

Получите все разрешения для пользователя или роли:

Enforcer::getPermissionsForUser('eve'); // return array

Подумайте, есть ли у пользователя определенное разрешение:

Enforcer::hasPermissionForUser('eve', 'articles', 'read');  // true or false

Подробнее API См. каспийский API.

Использование промежуточного программного обеспечения

Пакет расширения содержит Промежуточное программное обеспечение Enforcer и Промежуточное программное обеспечение запроса Промежуточное программное обеспечение. Вы можете добавить их в свой app/Http/Kernel.php В документе:

protected $routeMiddleware = [
    // ...
    // a basic Enforcer Middleware
    'enforcer' => \Lauthz\Middlewares\EnforcerMiddleware::class,
    // an HTTP Request Middleware
    'http_request' => \Lauthz\Middlewares\RequestMiddleware::class,
];

Базовое промежуточное программное обеспечение enforcer

Затем они могут быть использованы для защиты маршрутов:

Route::group(['middleware' => ['enforcer:articles,read']], function () {
    // pass
});

Промежуточное программное обеспечение HTTP-запросов (поддерживает restful)

Если вам нужно авторизовать запрос, вам необходимо сначала config/auth-rbac-model.conf Конфигурация модели, определенная в:

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[role_definition]
g = _, _

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = g(r.sub, p.sub) && keyMatch2(r.obj, p.obj) && regexMatch(r.act, p.act)

Затем используйте правила промежуточного программного обеспечения:

Route::group(['middleware' => ['http_request']], function () {
    Route::resource('photo', 'PhotoController');
});

Множество лиц, принимающих решения

Если вам нужно более одного элемента управления разрешениями в вашем проекте, вы можете настроить более одного Лица, принимающего решения .

оставайтесь authz В файле конфигурации, вы должны настроить следующим образом:

return [
    'default' => 'basic',

    'basic' => [
        'model' => [
            // ...
        ],

        'adapter' => Lauthz\Adapters\DatabaseAdapter::class,
        // ...
    ],

    'second' => [
        'model' => [
            // ...
        ],

        'adapter' => Lauthz\Adapters\DatabaseAdapter::class,
        // ...
    ],
];

Затем выберите, какое лицо, принимающее решения, использовать:

Enforcer::guard('second')->enforce("eve", "articles", "edit");

Командная строка ремесленника

Ты можешь быть там. Консоль Используйте ремесленник Политика создания команд:

Добавить политику для пользователя:

php artisan policy:add eve,articles,read

Чтобы добавить политику в роль:

php artisan policy:add writer,articles,edit

Назначьте роли пользователям:

php artisan role:assign eve writer

кэш

кэш Для предоставления авторизации Правила могут повысить производительность. По умолчанию они отключены.

В ларавеле config/lauthz.php Для настройки собственной конфигурации кэша:

'cache' => [
    // changes whether Lauthz will cache the rules.
    'enabled' => false,

    // cache store
    'store' => 'default',

    // cache Key
    'key' => 'rules',

    // ttl \DateTimeInterface|\DateInterval|int|null
    'ttl' => 24 * 60,
],

Последний

Кабина Адрес проекта: https://github.com/php-caspin/php-caspin

Авторизация Laravel Адрес проекта: https://github.com/php-caspin/laravel-authz

Вы можете просмотреть Документы кабины Кабины