>  기사  >  백엔드 개발  >  Yii 승인 역할 기반 액세스 제어(RBAC)

Yii 승인 역할 기반 액세스 제어(RBAC)

步履不停
步履不停원래의
2019-06-29 17:49:592653검색

Yii 승인 역할 기반 액세스 제어(RBAC)

1: 기본 개념

역할은 권한 모음입니다(예: 게시물 생성, 게시물 수정). 역할은 한 명 이상의 사용자에게 할당될 수 있습니다. 사용자에게 특정 권한이 있는지 확인하기 위해 시스템에서는 해당 권한이 포함된 역할이 사용자에게 할당되었는지 확인합니다.

규칙을 사용하여 역할이나 권한과 연결할 수 있습니다. 규칙은 코드로 표현되며, 사용자가 해당 역할이나 권한을 충족하는지 확인할 때 규칙이 실행됩니다. 예를 들어, "게시물 수정" 권한은 사용자가 게시물 작성자인지 확인하는 규칙을 사용할 수 있습니다. 권한 확인 과정에서 사용자가 게시물 작성자가 아닌 경우 해당 사용자는 "게시물 수정" 권한이 없는 것으로 간주됩니다.

역할과 권한은 모두 계층적으로 구성될 수 있습니다. 어떤 경우에는 역할이 다른 역할이나 권한으로 구성될 수 있으며, 이는 다시 다른 권한으로 구성될 수 있습니다. Yii는 보다 구체적인 트리 수준을 포함하는 소위 로컬 순서 계층 구조를 구현합니다. 역할에는 권한이 포함될 수 있지만 그 반대의 경우는 불가능합니다. (번역자 주: 역할은 맨 위에 있고 권한은 맨 아래에 있는 것으로 이해하면 됩니다. 권한이 위에서 아래로 만나면 역할은 더 아래에 나타날 수 없습니다.)

둘: RBAC 구성

인증 데이터 정의 및 수행 시작 액세스 확인 전에 애플리케이션 구성 요소 yiibaseApplication::authManager를 구성해야 합니다. Yii는 yiirbacPhpManager와 yiirbacDbManager라는 두 가지 권한 부여 관리자 세트를 제공합니다. 전자는 PHP 스크립트를 사용하여 인증 데이터를 저장하고, 후자는 데이터베이스를 사용하여 인증 데이터를 저장합니다. 애플리케이션에 많은 동적 역할 및 권한 관리가 필요하지 않은 경우 이전

1 사용을 고려할 수 있습니다. yiirbacPhpManager

return [    // ...
    'components' => [        'authManager' => [            'class' => 'yii\rbac\PhpManager',
        ],        // ...
    ],
];

사용 구성이 완료되면 Yii::$app->를 통해 authManager에 액세스할 수 있습니다. authManager

yiirbacPhpManager 기본적으로 RBAC 데이터는 @app/rbac 디렉터리의 파일에 저장됩니다. 권한 수준 데이터가 런타임 시 수정되는 경우 웹 서버 프로세스에 디렉터리와 그 안의 파일에 대한 쓰기 권한이 있는지 확인하세요.

2: yiirbacDbManager 사용

(1) yiirbacDbManager 구성

return [    // ...
    'components' => [        'authManager' => [            'class' => 'yii\rbac\DbManager',            // uncomment if you want to cache RBAC items hierarchy
            // 'cache' => 'cache',
        ],        // ...
    ],
];

참고:

Yii의 기본 템플릿을 사용하는 경우 config/console.php 및 config/web.php 파일에서 위 구성을 구성해야 합니다. Yii의 고급 템플릿인 경우 common/config/main.php 파일에서 한 번만 구성하면 됩니다

(2) 필요한 권한 테이블을 생성합니다

yiirbacDbManager를 사용하는 경우에는 다음을 수행해야 합니다. 4개의 데이터베이스 테이블을 생성하여 권한 데이터를 저장합니다(모두 기본 테이블 이름이 있습니다. 테이블 이름을 수정해야 하는 경우 yiirbacDbManager 구성 시 수정하세요)

itemTable: 이 테이블은 권한 항목(역자 주: 역할 및 권한)을 저장합니다. 기본 테이블 이름은 "auth_item" 입니다.
itemChildTable: 이 테이블은 인증 항목의 계층 관계를 저장합니다. 기본 테이블 이름은 "auth_item_child"입니다.
할당 테이블: 이 테이블은 사용자에 대한 인증 항목 할당을 저장합니다. 기본 테이블 이름은 "auth_location"입니다.
ruleTable: 이 테이블은 규칙을 저장합니다. 기본 테이블 이름은 "auth_rule"입니다.

Execute

yii migration --migrationPath=@yii/rbac/migrations

프로젝트 디렉터리에서 위 명령을 실행하면 위에서 언급한 4개의 테이블이 이때 우리 데이터베이스에 생성됩니다

Yii 승인 역할 기반 액세스 제어(RBAC)

상세 명령어를 사용하여 데이터베이스를 생성하지 않는 경우, Vendyiisoftyii2rbacmigrationsschema-mysql.sql의 내용을 데이터베이스에 복사하여 실행하면 데이터 테이블을 생성할 수 있습니다

해당 권한 테이블을 생성한 후 Yii::$를 사용할 수 있습니다. app->authManager를 사용하여 authManager에 액세스

3: 인증 데이터 설정

1: 권한 추가(생성)(auth_item 테이블에 권한 데이터 생성, 유형 2는 권한을 나타냄)

$auth = Yii::$app->authManager;// 添加 "createPost" 权限$createPost = $auth->createPermission('createPost');
$createPost->description = '创建了createPost权限';
$auth->add($createPost);

2: 역할 생성(auth_item Role에서) 테이블에 데이터가 생성되고 유형은 역할을 나타내는 1입니다)

$auth = Yii::$app->authManager;
$role = $auth->createRole('author');
$role->description = '创建了author角色';
$auth->add($role);

3: 역할에 권한 부여

(1) 역할에 지정된 권한 부여

$auth = Yii::$app->authManager;
$createPost = $auth->createPermission('createPost');//创建权限对象
$role = $auth->createRole('author');//创建角色对象
$auth->addChild($role, $createPost); //添加对应关系(给author角色添加createPost权限)

(2) 지정된 역할의 모든 권한을 역할에 부여

$auth = Yii::$app->authManager;
$role1 = $auth->createRole('author1');//创建角色对象
$role2 = $auth->createRole('author2');//创建权限对象
$auth->addChild($role1, $role2); //添加对应关系(给author1角色添加author2角色所有权限)

4: 사용자에게 역할 할당

$auth = Yii::$app->authManager;
$role = $auth->createRole('author');//创建角色对象$auth->assign($role, 1); #1是IdentityInterface::getId()返回的id,及用户表的id

4: 권한 확인

\Yii::$app->user->can($action) #$action表示权限\Yii::$app->user->can('createPost') #判断用户是否具有createPost权限

사용자가 속한 역할 가져오기

$auth = Yii::$app->authManager;
$roles = $auth->getRolesByUser($userId);

사용자가 속한 권한 가져오기

$auth = Yii::$app->authManager;
$roles = $auth->getPermissionsByUser($userId);

위는 역할 기반 액세스에 대한 간단한 이해입니다. 자세한 내용은 Yii 공식 문서를 참고하세요

위 내용은 Yii 승인 역할 기반 액세스 제어(RBAC)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.