Рубрики
Uncategorized

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

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

PHP caspian-это мощная и эффективная система контроля доступа с открытым исходным кодом, которая поддерживает управление правами на основе различных моделей контроля доступа.

Think caspian-это специальный пакет расширений для ThinkPHP 5.1, который облегчает разработчикам использование проектов caspian ThinkPHP.

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

  1. Создайте проект ThinkPHP( без ):
composer create-project topthink/think=5.1.* tp5
  1. останься Подумай В проекте установка Мыслительная кабина Расширение:
composer require casbin/think-adapter
  1. Публикация ресурсов:
php think casbin:publish

Это автоматически создаст профиль модели config/cabin-basic-model.conf и файлы конфигурации для caspin config/casbin.php

  1. Миграция данных:

Поскольку think caspian по умолчанию хранит политику caspian в базе данных, вам необходимо инициализировать информацию в таблице базы данных.

Перед выполнением, пожалуйста, Убедитесь, что информация о подключении к базе данных настроена правильно , если ее необходимо изменить отдельно Casbin Информация о подключении к базе данных или имя таблицы, которую можно изменить config/casbin.php Конфигурация в.

php think casbin:migrate

Это автоматически создаст таблицу политики casbin casbin_rule

промежуточный слой

Подумайте, что из 5.1.6+ В начале версии была официально представлена поддержка промежуточного программного обеспечения.

Промежуточное программное обеспечение может быть быстро сгенерировано с помощью инструкций командной строки

php think make:middleware Authorization

Эта команда приложение/http/промежуточное программное обеспечение Создаст Авторизация Промежуточное программное обеспечение.

В промежуточном программном обеспечении получите текущее имя пользователя, URI, метод запроса и используйте разрешения Cabin Verify:

url();
        $action = $request->method();

        if (!$user){
            return response()->data('Unauthenticated.')->code(401);
        }

        if (!Casbin::enforce($user, $url, $action)) {
            return response()->data('Unauthorized.')->code(403);
        }

        return $next($request);
    }
}

Конфигурация модели Каспийского моря

конфигурация\кабина-базовая модель.conf Профиль:

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

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

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

Проверка

Перед выполнением авторизации в таблицу добавляется база данных cabin_rule Некоторые политики по умолчанию:

1 test_user /пользователи ПОЛУЧИТЬ p
2 test_user /пользователи/:идентификатор ПОЛУЧИТЬ p

Добавьте маршрутизацию и ее промежуточное программное обеспечение:

Route::group('users', function () {
    
    Route::get('', function () {
        return 'Users data.';
    });

    Route::get('/:id', function ($id) {
        return 'User: '.$id;
    });

})->middleware(\app\http\middleware\Authorization::class);

Войдите в систему, сначала сохраните имя пользователя в СЕАНСЕ , доступно /пользователямпользователям/1 Проверьте разрешения.

Дополнительные ссылки на API

  • API управления
  • API RBAC