PHP caspian-это мощная и эффективная система контроля доступа с открытым исходным кодом, которая поддерживает управление правами на основе различных моделей контроля доступа.
Think caspian-это специальный пакет расширений для ThinkPHP 5.1, который облегчает разработчикам использование проектов caspian ThinkPHP.
устанавливать
- Создайте проект ThinkPHP( без ):
composer create-project topthink/think=5.1.* tp5
- останься
ПодумайВ проекте установкаМыслительная кабинаРасширение:
composer require casbin/think-adapter
- Публикация ресурсов:
php think casbin:publish
Это автоматически создаст профиль модели config/cabin-basic-model.conf и файлы конфигурации для caspin config/casbin.php 。
- Миграция данных:
Поскольку 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