어떻게 Casbin 을 ThinkpHP 의 권한 으로 미들웨어 를 제어 합 니까?

개술
PHP-Casbin 은 강력 하고 효율 적 인 오픈 소스 액세스 제어 프레임 워 크 로 각종 액세스 제어 모델 을 기반 으로 하 는 권한 관 리 를 지원 합 니 다.
Think-Casbin 은 ThinkpHP 5.1 을 위 한 맞 춤 형 Casbin 확장 패키지 로 개발 자 들 이 thinkphp 프로젝트 에서 Casbin 을 더욱 편리 하 게 사용 할 수 있 도록 합 니 다.
설치 하 다.
thinkphp 프로젝트 만 들 기(없 으 면):

composer create-project topthink/think=5.1.* tp5
ThinkpHP 프로젝트 에 Think-Casbin 확장 을 설치 합 니 다.

composer require casbin/think-adapter
발표 자원:

php think casbin:publish
이것 은 model 프로필 config/casbin-basic-model.conf 와 Casbin 프로필 config/casbin.php 를 자동 으로 생 성 합 니 다.
데이터 이동:
Think-Casbin 은 기본적으로 Casbin 의 정책(Policy)을 데이터베이스 에 저장 하기 때문에 데이터베이스 시트 정 보 를 초기 화 해 야 합 니 다.
실행 하기 전에 데이터베이스 연결 정보 설정 이 정확 한 지 확인 하 십시오.Casbin 의 데이터베이스 연결 정보 나 표 이름 을 따로 수정 하려 면 config/casbin.php 의 설정 을 수정 할 수 있 습 니 다.

php think casbin:migrate
이것 은 자동 으로 Casbin 정책(Policy)표 casbin 을 만 듭 니 다.rule。
중간 부품
씽 크 PHP 는 5.1.6+버 전부터 미들웨어 지원 을 본 격 도입 했다.
명령 행 명령 을 통 해 중간 부품 을 신속하게 생 성 할 수 있다

php think make:middleware Authorization
이 명령 은 application/http/middleware 디 렉 터 리 아래 Authorization 미들웨어 를 생 성 합 니 다.
미들웨어 에서 현재 사용자 이름,URI,요청 방법 을 가 져 오고 Casbin 을 통 해 권한 을 검증 합 니 다.

<?php

namespace app\http\middleware;

use Casbin;
use think\facade\Session;

class Authorization
{
    public function handle($request, \Closure $next)
    {
        //        ,   session  
        // $user = Session::get('user_name') ?: 'test_user';
        $user = Session::get('user_name');

        $url = $request->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);
    }
}
Casbin 모델 설정
config\\casbin-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
검증 하 다.
인증 을 실행 하기 전에 데이터베이스 캐 빈rule 표 에 기본 정책 추가:
id
ptype
v0
v1
v2
1
p
test_user
/users
GET
2
p
test_user
/users/:id
GET
루트 와 그 사이 의 부품 추가:

Route::group('users', function () {

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

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

})->middleware(\app\http\middleware\Authorization::class);
먼저 로그 인하 여 사용자 이름 을 SESSION 에 저장 하면/users,/users/1 에 접근 하여 권한 을 검증 할 수 있 습 니 다.
이상 은 어떻게 Casbin 을 ThinkpHP 의 권한 으로 미들웨어 를 제어 하 는 지 에 대한 상세 한 내용 입 니 다.더 많은 Casbin 을 ThinkpHP 의 권한 으로 미들웨어 를 제어 하 는 데 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 시기 바 랍 니 다!

좋은 웹페이지 즐겨찾기