権限制御ライブラリCasbinのSlimでの応用
3626 ワード
PHP-Casbinは、さまざまなアクセス制御モデルに基づく権限管理をサポートする強力で効率的なオープンソースアクセス制御フレームワークです.
SlimはPHPマイクロフレームワークで、シンプルだが強力なWebアプリケーションとAPIをすばやく作成できます.
Casbinは、Slim Frameworkの1つである
資格認定
先に認証し、後で許可します.
ここではHTTP Basic Authenticationを使用します.
slim-basic-authはPSR-7とPSR-15の基本認証ミドルウェアを提供し、composerを使用してインストールできます:
Casbinライセンスミドルウェア
この例では、ライセンスミドルウェアを実装します.
まず、現在認証されている
Modelファイル
ポリシーファイル
ルーティングの作成
Casbinスケルトン応用
完全なコード:Casbin skeleton application with Slim Framework 4.
Slim Framework 4を使用して新しい
SlimはPHPマイクロフレームワークで、シンプルだが強力なWebアプリケーションとAPIをすばやく作成できます.
Casbinは、Slim Frameworkの1つである
ミドルウェアとして使用することができる.資格認定
先に認証し、後で許可します.
ここではHTTP Basic Authenticationを使用します.
slim-basic-authはPSR-7とPSR-15の基本認証ミドルウェアを提供し、composerを使用してインストールできます:
composer require tuupola/slim-basic-auth
.$app->add(new HttpBasicAuthentication([
'users' => [
'root' => 't00r',
'somebody' => 'passw0rd',
],
'before' => function ($request, $arguments) {
return $request->withAttribute('user', $arguments['user']);
},
]));
Casbinライセンスミドルウェア
この例では、ライセンスミドルウェアを実装します.
まず、現在認証されている
user
、現在要求されているuri
、およびmethod
を取得し、その後、Casbin
を使用して権限決定を行います.
namespace App\Middleware;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Server\RequestHandlerInterface as RequestHandler;
use Slim\Psr7\Response;
use Casbin\Enforcer;
class Authorization
{
/**
* Authorization middleware invokable class.
*
* @param ServerRequest $request PSR-7 request
* @param RequestHandler $handler PSR-15 request handler
*
* @return Response
*/
public function __invoke(Request $request, RequestHandler $handler): Response
{
$e = new Enforcer('config/rbac_model.conf', 'config/policy.csv');
$user = $request->getAttribute('user');
$uri = $request->getUri();
$action = $request->getMethod();
if ($user && !$e->enforce($user, $uri->getPath(), $action)) {
$response = new Response();
$response->withStatus(403)->getBody()->write('Unauthorized.');
return $response;
}
$response = $handler->handle($request);
return $response;
}
}
Modelファイル
config/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) && r.act == p.act
ポリシーファイル
config/policy.csv
の内容は次のとおりです.p, root, /, GET
p, root, /users, GET
p, root, /users/:id, GET
ルーティングの作成
$app->get('/', function (Request $request, Response $response) {
$response->getBody()->write('Hello Casbin !');
return $response;
});
$app->group('/users', function (Group $group) {
$group->get('', ListUsersAction::class);
$group->get('/{id}', ViewUserAction::class);
});
Casbinスケルトン応用
完全なコード:Casbin skeleton application with Slim Framework 4.
Slim Framework 4を使用して新しい
Casbin
スケルトンアプリケーションを構成することが容易になります.