https://github.com/php-casbin/yii-permission
Use casbin in Yii PHP Framework, Casbin is a powerful and efficient open-source access control library.
https://github.com/php-casbin/yii-permission
abac access-control acl adapter auth casbin permission rbac yii
Last synced: about 1 year ago
JSON representation
Use casbin in Yii PHP Framework, Casbin is a powerful and efficient open-source access control library.
- Host: GitHub
- URL: https://github.com/php-casbin/yii-permission
- Owner: php-casbin
- License: apache-2.0
- Created: 2018-11-14T02:24:30.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2021-09-26T15:52:07.000Z (over 4 years ago)
- Last Synced: 2024-04-23T23:38:35.670Z (about 2 years ago)
- Topics: abac, access-control, acl, adapter, auth, casbin, permission, rbac, yii
- Language: PHP
- Homepage:
- Size: 24.4 KB
- Stars: 42
- Watchers: 6
- Forks: 8
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Yii-Permission
[](https://github.com/php-casbin/yii-permission/actions/workflows/build.yml)
[](https://coveralls.io/github/php-casbin/yii-permission)
[](https://packagist.org/packages/casbin/yii-permission)
[](https://packagist.org/packages/casbin/yii-permission)
[](https://packagist.org/packages/casbin/yii-permission)
Use [Casbin](https://github.com/php-casbin/php-casbin) in Yii 2.0 PHP Framework.
## Installation
### Getting Composer package
Require this package in the `composer.json` of your Yii 2.0 project. This will download the package.
```
composer require casbin/yii-permission
```
### Configuring application
To use this extension, you have to configure the `Casbin` class in your application configuration:
```php
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}}',
],
],
]
];
```
## Usage
### Quick start
Once installed you can do stuff like this:
```php
$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');
```
You can check if a user has a permission like this:
```php
// 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
}
```
### Using Enforcer Api
It provides a very rich api to facilitate various operations on the Policy:
Gets all roles:
```php
$permission->getAllRoles(); // ['writer', 'reader']
```
Gets all the authorization rules in the policy.:
```php
$permission->getPolicy();
```
Gets the roles that a user has.
```php
$permission->getRolesForUser('eve'); // ['writer']
```
Gets the users that has a role.
```php
$permission->getUsersForRole('writer'); // ['eve']
```
Determines whether a user has a role.
```php
$permission->hasRoleForUser('eve', 'writer'); // true or false
```
Adds a role for a user.
```php
$permission->addRoleForUser('eve', 'writer');
```
Adds a permission for a user or role.
```php
// to user
$permission->addPermissionForUser('eve', 'articles', 'read');
// to role
$permission->addPermissionForUser('writer', 'articles','edit');
```
Deletes a role for a user.
```php
$permission->deleteRoleForUser('eve', 'writer');
```
Deletes all roles for a user.
```php
$permission->deleteRolesForUser('eve');
```
Deletes a role.
```php
$permission->deleteRole('writer');
```
Deletes a permission.
```php
$permission->deletePermission('articles', 'read'); // returns false if the permission does not exist (aka not affected).
```
Deletes a permission for a user or role.
```php
$permission->deletePermissionForUser('eve', 'articles', 'read');
```
Deletes permissions for a user or role.
```php
// to user
$permission->deletePermissionsForUser('eve');
// to role
$permission->deletePermissionsForUser('writer');
```
Gets permissions for a user or role.
```php
$permission->getPermissionsForUser('eve'); // return array
```
Determines whether a user has a permission.
```php
$permission->hasPermissionForUser('eve', 'articles', 'read'); // true or false
```
### Using Yii Authorization
It allows you to integrate Yii's authorization with the Casbin permission management system.
**(1) AccessChecker**
Add the accessChecker configuration in your application's `config/web.php` file:
```php
$config = [
'components' => [
'user' => [
...
'accessChecker' => 'yii\permission\components\PermissionChecker',
]
];
```
Once configured, you can use the `can()` method to check if a user has permission to perform certain actions:
```php
$user->can('acrticles,read');
```
**(2) Behaviors**
The `PermissionControl` behavior allows you to enforce permission checks at the controller level. Add the PermissionControl behavior to your controller's behaviors() method:
```php
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
]
];
}
```
**Note:** Additionally,You can also configure a `denyCallback` for each `policy`, which will be invoked when the user does not meet the required permission. This callback takes precedence. The configuration is similar to Yii's official [AccessControl](https://www.yiiframework.com/doc/guide/2.0/en/security-authorization#access-control-filter).
See [Casbin API](https://casbin.org/docs/en/management-api) for more APIs.
## Define your own model.conf
[Supported models](https://github.com/php-casbin/php-casbin#supported-models).
## Learning Casbin
You can find the full documentation of Casbin [on the website](https://casbin.org/).