m00nk/yii2-rbac

Silmple RBAC (like in Yii)

Installs: 48

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 0

Open Issues: 0

Type:yii2-extension

2.1.1 2015-08-06 22:21 UTC

This package is auto-updated.

Last update: 2024-04-25 05:44:33 UTC


README

Мне не понравилась стандартная реализация RBAC в Yii2, слишком уж они все усложнили. В частности, для не очень больших проектов, где прав доступа не очень много и они в процессе жизни приложения практически не меняются, этот подход на мой взгляд слишком громоздок. Поэтому я решил запилить реализацию RBAC на основе файлов, похожую на ту, что была в первом Yii.

Этот код служит только для проверки прав доступа. Здесь нет возможности программно создавать иерархию прав и сохранять ее. Иерархия описывается вручную в файле настроек.

Инсталляция

Устанавливается с посощью composer.

Для установки выполняем команду

php composer.phar require --prefer-dist m00nk/yii2-rbac  "*"

или добавляем

"m00nk/yii2-rbac": "*"

в разделе require вашего composer.json файла.

Настройка

'components' => [
    ...
    'authManager' => [
		  'class' => 'm00nk\rbac\AuthManager',
		  'authFile' => '@app/config/auth.php' // путь к файлу с описанием иерархии прав доступа
		],
		...
],

Пример файла прав доступа (@app/config/auth.php)

return [

	// PERMISSIONS
    //-------------------------

	'permCreatePost' => [
		'type' => 0, // permission
		'description' => 'право на создание поста в блоге'
	],

	'permUpdatePost' => [
		'type' => 0,
		'description' => 'право на редактирование поста в блоге'
	],

	// TASKS
    //-------------------------

	'permUpdateOwnPost' => [
		'type' => 1, // task
		'description' => 'право на редактирование СЫВОЕГО поста в блоге'
		'rule' => 'return app\\models\\Post::mayEditPost($params["id"]);',
		'children' => [
			'permUpdatePost'
		]
	],

	// ROLES
    //-------------------------

	'author' => [
		'type' => 2, // role
		'description' => 'автор - может только создавать посты и редактировать только свои'
		'children' => [
			'permCreatePost',
			'permUpdateOwnPost'
		]
	],

	'moderator' => [
		'type' => 2, // role
		'description' => 'модератор - может только редактировать посты, зато чьи угодно'
		'children' => [
			'permUpdatePost'
		]
	],

];

Начиная с версии 2.1.0 можно в качестве правил использовать инлайн-функции:

'rule' => function($params){ return app\models\Post::mayEditPost($params["id"]); },

Проверка прав в коде

Проверка осуществлается стандартным способом:

// проверяем, может ли юзер создавать посты
if(\Yii::$app->user->can('permCreatePost')) ...

// проверяем, может ли юзер редактировать текущий пост
// обратите внимание, что проверяется именно permUpdatePost, а не permUpdateOwnPost
if(\Yii::$app->user->can('permUpdatePost', ['id' => $post->id])) ...