어떻게 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 의 권한 으로 미들웨어 를 제어 하 는 데 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 시기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Thinkphp의 S 캐시 사용법!텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.