yii 2 RBAC 는 DbManager 를 사용 하여 배경 권한 판단 을 실현 하 는 방법
우선 문서 에 따라 yii 2 프레임 워 크 의 표를 생 성 합 니 다.
yii migrate --migrationPath=@yii/rbac/migrations/
다음 4 표 생 성:
auth_assignment
auth_item_child
auth_item
auth_rule
yii 의 gii 를 사용 하여 대응 하 는 model 을 빠르게 생 성 하지만 authitem 표 는 캐릭터 와 권한 을 동시에 저장 합 니 다.나중에 우 리 는 캐릭터 와 권한 을 나 누 어 curd 작업 을 해 야 하기 때문에 저 는 RoleForm 과 Permissionform 두 model 을 새로 만들어 서 캐릭터 와 권한 을 구분 합 니 다.캐릭터 와 권한 이 밀접 하 게 연결 되 어 있 기 때문에 auth아 이 템 이 생 성 한 model 에 속성$child 를 하나 더 추가 하면 지금 은 상관 하지 않 습 니 다.
다음은 캐릭터 모델 관련 코드 입 니 다.
<?php
namespace app\models;
use Yii;
use app\models\AuthItem;
use yii\rbac\Item;
/*
* model
*
*/
class RoleForm extends AuthItem
{
public function init() {
parent::init();
$this->type = Item::TYPE_ROLE;//yii-rbac-Role 1
}
}
다음은 권한 model 관련 코드 입 니 다.
<?php
namespace app\models;
use Yii;
use app\models\AuthItem;
use yii\rbac\Item;
/*
* model
*
*/
class PermissionForm extends AuthItem
{
public function init() {
parent::init();
$this->type = Item::TYPE_PERMISSION;// 2
}
}
또한 Auth Item 모델 에 속성 을 추가 합 니 다.
<?php
class AuthItem.....
public $child;//
......
이제 저희 가 대응 하 는 컨트롤 러 입 니 다.우선 권한 컨트롤 러 가 컨트롤 러 를 쓸 때 시스템 자체 확장 을 사용 해 야 한다 고 합 니 다.
。。。
use yii\rbac\Permission;
。。。
/*
*
*/
public function actionCreate() {
$model = new PermissionForm();
if( $model->load( Yii::$app->request->post() ) && $model->validate() ) {
//rbac permission
$permission = new Permission();
$permission->name = trim( $model->name );
$permission->type = $model->type;
//
Yii::$app->authManager->add( $permission );
}
}
수정 할 때 다른 변 하지 않 는 게 방법 을 바 꾼 거 예요.
/*
* param string $name
* param Object $permission
*/
Yii::$app->authManager->update( $name, $permission );
여 기 는 삭제 입 니 다.
//Returns the named permission.
$permission = Yii::$app->authManager->getPermission( $name );
//Removes a permission or rule from the RBAC system.
Yii::$app->authManager->remove( $permission );
권한 의 cud 가 모두 해결 되 었 습 니 다.보기 만 하면 쓰 지 않 습 니 다.다음은 캐릭터 컨트롤 러.
이거 챙 겨.
use yii\rbac\Role;
/*
*
*/
public function actionCreate() {
$model = new RoleForm();
if ( $model->load( Yii::$app->request->post() ) && $model->validate() ) {
//
$role = new Role();
$role->name = $model->name;
$role->type = $model->type;
//
Yii::$app->authManager->add( $role );
}
// ( )
$permissions = $this->loadPermission();
// $model $permissions....
}
/*
*
* param string $name
* param Object $role
*/
$bool = Yii::$app->authManager->update( $name, $role );
삭제 할 때 좀 귀찮아 요.
/*
* param string $name
*/
$role = Yii::$app->authManager->getRole( $name );//
//Returns the child roles.
$childAll = Yii::$app->authManager->getChildren( $role );
if ( isset($childAll) ) {//
foreach ($childAll as $value) {
//Returns the named permission.
$perObj = Yii::$app->authManager->getPermission($value);
//Removes a child from its parent.
Yii::$app->authManager->removeChild( $role, $perObj );
}
}
Yii::$app->authManager->remove( $role );//
가장 중요 한 것 은 우리 가 캐릭터 에 게 권한 을 부여 해 야 한 다 는 것 입 니 다.그 렇 죠?다음 코드 입 니 다.
//
$childArray = $this->loadRolePermission( $model->name );//
if ( !empty( $childArray ) ) {
$model->child = $childArray;
}
else {
$model->child = array();
}
//Returns all permissions in the system.
$permissions = Yii::$app->authManager->getPermissions();
$perArr = array();
foreach ($permissions as $key => $value) {
$perArr[$value->name] = $value->name;
}
if ( $model->load( Yii::$app->request->post() ) && $model->validate() ) {
//
$child = isset( $_POST['AuthItem']['child'] ) ? $_POST['AuthItem']['child'] : NULL;
// child
if ( empty( $child ) ) {
return $this->redirect(.. ..);
}
// , ,
if ( !empty( $childArray ) ) {
//Removed all children form their parent.
$bool = Yii::$app->authManager->removeChildren( $model );
if ( !$bool ) {
throw new HttpException(404, ' ! ~~~');
}
}
//
$role = Yii::$app->authManager->getRole( $model->name );
//child
if( isset( $child ) ) {
foreach ( $child as $val) {
//
$childObj = Yii::$app->authManager->getPermission($val);
// item_child ( )
Yii::$app->authManager->addChild( $role, $childObj );
}
return $this->redirect(.. ..);
}
}
마지막 으로 저희 마지막 컨트롤 러 입 니 다.캐릭터 가 사용자 와 연결 되 어 있 습 니 다.
/*
*
*/
//Returns the named role.
$role =Yii::$app->authManager->getRole( $roleName );
// Assigns a role to a user.
Yii::$app->authManager->assign( $role, $userId );<pre name="code" class="php">/*
*
* param int| string $userId id
* param string $permission
*/
Yii::$app->authManager->checkAccess( $userId , $permission ) )
다음은 판단 권한 입 니 다.
/*
*
* param int| string $userId id
* param string $permission
*/
Yii::$app->authManager->checkAccess( $userId , $permission ) )
Yii 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.본 고 는 Yii 프레임 워 크 를 기반 으로 한 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Yii2.0 rules 검증 규칙 집합required: 필수 값 검증 속성 이메일: 메일박스 인증 match: 정규 검증 URL: 사이트 주소 captcha: 인증 코드 안전 비교: 비교 default: 기본값 exist:존재 파일:파일 filter:필...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.