>  기사  >  PHP 프레임워크  >  thinkphp에서 Casbin을 권한 제어 미들웨어로 사용하기

thinkphp에서 Casbin을 권한 제어 미들웨어로 사용하기

尚
앞으로
2020-05-26 09:17:093307검색

thinkphp에서 Casbin을 권한 제어 미들웨어로 사용하기

PHP-Casbin은 다양한 액세스 제어 모델을 기반으로 권한 관리를 지원하는 강력하고 효율적인 오픈 소스 액세스 제어 프레임워크입니다.

Think-Casbin은 ThinkPHP5.1용으로 특별히 맞춤화된 Casbin 확장 패키지로, 개발자가 thinkphp 프로젝트에서 Casbin을 더 쉽게 사용할 수 있도록 해줍니다.

Install

thinkphp 프로젝트 생성(그렇지 않은 경우):

composer create-project topthink/think=5.1.* tp5

ThinkPHP 프로젝트에서 Think-Casbin 확장을 설치합니다:

composer require casbin/think-adapter

Publish resources:

php think casbin:publish

이렇게 하면 모델 구성 파일 config/casbin-basic이 자동으로 생성됩니다. -model .conf 및 Casbin의 구성 파일 config/casbin.php.

데이터 마이그레이션:

Think-Casbin은 기본적으로 Casbin의 정책(Policy)을 데이터베이스에 저장하므로 데이터베이스 테이블 정보를 초기화해야 합니다.

실행 전 데이터베이스 연결 정보가 올바르게 구성되어 있는지 확인하세요. Casbin의 데이터베이스 연결 정보나 테이블 이름을 별도로 수정해야 하는 경우 config/casbin.php에서 구성을 수정하면 됩니다.

php think casbin:migrate

이렇게 하면 Casbin의 정책 테이블 casbin_rule이 자동으로 생성됩니다.

Middleware

ThinkPHP는 버전 5.1.6+부터 공식적으로 미들웨어 지원을 도입했습니다.

명령줄 지침을 통해 신속하게 미들웨어를 생성할 수 있습니다.

php think make:middleware Authorization

이 명령은 application/http/middleware 디렉토리 아래에 인증 미들웨어를 생성합니다.

미들웨어에서 Casbin을 통해 현재 사용자 이름, URI, 요청 방법을 가져오고 권한을 확인합니다.

<?php

namespace app\http\middleware;

use Casbin;
use think\facade\Session;

class Authorization
{
    public function handle($request, \Closure $next)
    {
        // 当前登录用户名,这里以session为例
        // $user = Session::get(&#39;user_name&#39;) ?: &#39;test_user&#39;;
        $user = Session::get(&#39;user_name&#39;);

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

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

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

        return $next($request);
    }
}

Casbin 모델 구성

configcasbin-basic-model.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

Verification

인증을 수행하기 전에 먼저 데이터베이스 casbin_rule 테이블에 몇 가지 기본 정책을 추가하세요:

thinkphp에서 Casbin을 권한 제어 미들웨어로 사용하기

라우팅 및 해당 미들웨어 추가:

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

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

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

먼저 사용자에 로그인하고 사용자 이름을 SESSION에 저장하면 /users에 액세스할 수 있습니다. /users/1 권한을 확인합니다.

추천 튜토리얼: "TP5"

위 내용은 thinkphp에서 Casbin을 권한 제어 미들웨어로 사용하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제