casbin/yii-permission

在 Yii2 PHP 框架中使用 Casbin,Casbin 是一个强大而高效的开放源代码访问控制库。

v1.6.0 2024-08-21 15:44 UTC

This package is auto-updated.

Last update: 2024-09-21 16:10:06 UTC


README

Build Status Coverage Status Latest Stable Version Total Downloads License

在 Yii 2.0 PHP 框架中使用 Casbin。

安装

获取 Composer 包

在您的 Yii 2.0 项目的 composer.json 中要求此包。这将下载此包。

composer require casbin/yii-permission

配置应用程序

要使用此扩展,您必须配置应用程序配置中的 Casbin

return [
    //....
    'components' => [
        'permission' => [
            'class' => \yii\permission\Permission::class,
            
            /*
             * Casbin model setting.
             */
            'model' => [
                // Available Settings: "file", "text"
                'config_type' => 'file',
                'config_file_path' => '/path/to/casbin-model.conf',
                'config_text' => '',
            ],

            // Casbin adapter .
            'adapter' => \yii\permission\Adapter::class,

            /*
             * Casbin database setting.
             */
            'database' => [
                // Database connection for following tables.
                'connection' => '',
                // CasbinRule tables and model.
                'casbin_rules_table' => '{{%casbin_rule}}',
            ],
        ],
    ]
];

用法

快速入门

安装后,您可以执行类似以下操作

$permission = \Yii::$app->permission;

// adds permissions to a user
$permission->addPermissionForUser('eve', 'articles', 'read');
// adds a role for a user.
$permission->addRoleForUser('eve', 'writer');
// adds permissions to a rule
$permission->addPolicy('writer', 'articles','edit');

您可以使用这种方式检查用户是否有权限

// to check if a user has permission
if ($permission->enforce("eve", "articles", "edit")) {
    // permit eve to edit articles
} else {
    // deny the request, show an error
}

使用 Enforcer Api

它提供了一个非常丰富的 API,以方便对策略的各种操作

获取所有角色

$permission->getAllRoles(); // ['writer', 'reader']

获取策略中的所有授权规则。

$permission->getPolicy();

获取用户拥有的角色。

$permission->getRolesForUser('eve'); // ['writer']

获取具有角色的用户。

$permission->getUsersForRole('writer'); // ['eve']

确定用户是否有角色。

$permission->hasRoleForUser('eve', 'writer'); // true or false

为用户添加角色。

$permission->addRoleForUser('eve', 'writer');

为用户或角色添加权限。

// to user
$permission->addPermissionForUser('eve', 'articles', 'read');
// to role
$permission->addPermissionForUser('writer', 'articles','edit');

为用户删除角色。

$permission->deleteRoleForUser('eve', 'writer');

删除用户的所有角色。

$permission->deleteRolesForUser('eve');

删除角色。

$permission->deleteRole('writer');

删除权限。

$permission->deletePermission('articles', 'read'); // returns false if the permission does not exist (aka not affected).

为用户或角色删除权限。

$permission->deletePermissionForUser('eve', 'articles', 'read');

删除用户或角色的权限。

// to user
$permission->deletePermissionsForUser('eve');
// to role
$permission->deletePermissionsForUser('writer');

获取用户或角色的权限。

$permission->getPermissionsForUser('eve'); // return array

确定用户是否有权限。

$permission->hasPermissionForUser('eve', 'articles', 'read');  // true or false

使用 Yii 授权

它允许您将 Yii 的授权与 Casbin 权限管理系统集成。

(1) AccessChecker

将 accessChecker 配置添加到应用程序的 config/web.php 文件中

$config = [
    'components' => [
        'user' => [
            ...
            'accessChecker' => 'yii\permission\components\PermissionChecker',
        ]
];

配置后,您可以使用 can() 方法来检查用户是否具有执行某些操作的权利

$user->can('acrticles,read');

(2) Behaviors

PermissionControl 行为允许您在控制器级别执行权限检查。将 PermissionControl 行为添加到控制器的方法 behaviors() 中

public function behaviors()
{
    return [
        'permission' => [
            'class' => \yii\permission\components\PermissionControl::class,
            'user' => $user, // optional, defaults to \Yii::$app->user
            'only' => ['read-articles', 'write-articles'],
            'policy' => [
                [
                    'allow' => true,
                    'actions' => ['read-articles'],
                    'enforce' => ['articles', 'read']
                ],
                [
                    'allow' => true,
                    'actions' => ['write-articles'],
                    'enforce' => ['articles', 'write']
                ]
            ],
            'denyCallback' => function ($policy, $action) {
                // custom action when access is denied
            } // optional, defaults to throwing an exception
        ]
    ];
}

注意:另外,您还可以为每个 policy 配置一个 denyCallback,当用户不满足所需的权限时,将调用该回调。此回调具有优先权。配置类似于 Yii 的官方 AccessControl

有关更多 API,请参阅 Casbin API

定义自己的 model.conf

支持的模式.

学习 Casbin

您可以在网站上找到 Casbin 的完整文档 在这里