yii 2 RBAC 는 DbManager 를 사용 하여 배경 권한 판단 을 실현 하 는 방법

6884 단어 yii2권한
본 고 는 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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기