2016-02-26 3 views
8

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

Теперь у меня есть система загрузки документов, в которой у меня есть две роли: а именно: &. В принципе, роль администратора может выполнять все, в то время как роль кодера может создавать только собственные, собственные представления, собственные обновления и собственные права на удаление. Я уже создал правило с именем encodedBy.

Это мой код в моем EncoderRule

namespace app\rbac; use yii\rbac\Rule; 

/** * Checks if encoded_by matches user passed via params */ class EncoderRule extends Rule { 
    public $name = 'encodedBy'; 

    /** 
    * @param string|integer $user the user ID. 
    * @param Item $item the role or permission that this rule is associated with 
    * @param array $params parameters passed to ManagerInterface::checkAccess(). 
    * @return boolean a value indicating whether the rule permits the role or permission it is associated with. 
    */ 
    public function execute($user, $item, $params) 
    { 
     return isset($params['document']) ? $params['document']->encoded_by == $user : false; 
    } } 

хранить данные в таблице «документ», где у меня есть поле с именем «encoded_by» Я надеюсь, что вы, ребята, можете помочь мне в этом. Большое спасибо !!!

+0

Это видео действительно помогает объяснить RBAC тем, кто не знает, как это работает: https://www.youtube.com/watch?v = vLb8YATO-HU – TheStoryCoder

ответ

2

Если я четко понимаю вас, вы хотите использовать Yii2 RBAC Rule для реализации некоторых разрешений для пользователей системы (Admin и encoder). Ну, это довольно прямолинейно до некоторой степени.

У Yii2 есть существующие таблицы для этой цели. Эти таблицы: i. auth_assignment ii. auth_item iii. auth_item_child iv. auth_rule

Первое, что вам нужно сделать, это выбрать, какие AuthManager вы хотите использовать либо PhpManager или DBManager, но я бы посоветовал вам использовать DBManager причина в том, что это то, что я использую

Если вы используете Yii2 Basic шаблон, добавьте следующие строки кода под компонентами в web.php

'authManager' => [ 
       'class' => 'yii\rbac\DbManager', 
       'defaultRoles' => ['guest'], 
], 

Если Yii2 Расширенный шаблон, добавьте строки кода под компонентами в main.php внутри \ Common \ Config папки

Сделав упомянутый выше шаги,

  • Run Yii мигрирующие --migrationPath = @ юй/RBAC/миграции из командной строки

Приведенный выше код будет генерировать/создать четыре таблицы, была автоматически указана автоматически в базе данных для вас

Чтобы создать свои правила RBAC.

Для этого вам необходимо создать разрешения и роли.

Для базового шаблона,

  • Создайте файл и назовите его RbacController.php внутри команды папки

См http://pastebin.com/RAKpZX2J, чтобы увидеть, как она выглядит

Для Advanced шаблона, - Создайте тот же файл, но вместо этого он будет находиться внутри консоли \ контроллеры \ RbacController.PHP

Сделав все это,

  • Run юй RBAC/инициализации // Это Willl запустить actionInit() внутри файла RbacController

если вы успешно создали все сказанное выше, вы может сделать что-то вроде этого, чтобы знать, если пользователь имеет разрешение

if(Yii::$app->user->can('createUser')){ 

} 

Я надеюсь, что это помогает ..

+3

Спасибо, но как насчет правил? это для создания ролей и разрешений, у меня уже есть это. Моя проблема заключается в том, как реализовать правила в контроллере ??? –

+0

@C. Норрис, вы использовали правила, если да, можете ли вы разместить пример, пожалуйста? – Ludo

0

Если вам требуется простая проверка ролей, вы можете расширить класс AccessRule для размещения новых ролей, не вникая в полномасштабное управление доступом на основе ролей. Для получения более подробной информации обратитесь к этому учебному курсу: Simpler Role Based Authorization in Yii 2.0

Это самый простой способ, который я открыл для понимания, реализации и поддержки ролей, однако вы можете скомпрометировать широкую гибкость, обеспечиваемую полным RBAC для простоты.

Полное раскрытие информации: Я являюсь автором сообщения в блоге.

1

Я тоже борюсь с этим. Все, что я мог догадываться до сих пор, что $params['post'] абсолютно не работает для меня. Я понятия не имею, где - что я должен определить, чтобы заставить его работать. Но я мог бы вычислить based on the post of Joel Small, что если я так просто (я хочу просто запретить доступ к форме обновления в случае некоторых обстоятельств относительно состояния модели):

app \ rbac \ ZnwRule.php :

namespace app\rbac; 

use yii\rbac\Rule; 
use app\models\Znw; 

class ZnwRule extends Rule { 

    public function execute($user, $item, $params) { 
     $znw = Znw::findOne(\Yii::$app->request->get('id')); 
     return $znw->created_by || $znw->zwz_id == 0 || !$znw->created_at ? false : true; 
    } 
} 

, а затем в ZnwController:

public function actionUpdatezd($id) { 
    if (\Yii::$app->user->can('updatezd')) { 
    ... 
    } else { 
     throw new \yii\web\ForbiddenHttpException('Sorry, you are not allowed to do that.'); 
    } 

Я определил в yii2-администратора, что у меня есть правило:

Имя: ZnwRule

класса: приложение \ RBAC \ ZnwRule

и я создал разрешения под названием updatezd:

имени: updatezd

правила: ZnwRule

Я начал свое приложение с основного контроллера, где я проверяю, разрешен ли маршрут в yii2-admin или нет для определенной роли, и все остальные контроллеры расширяют этот. Теперь, когда мне пришлось иметь дело с разрешениями и правилами, мне пришлось добавить маршрут и к разрешению. Я уверен, что это может быть сделано легче, но, по крайней мере, кажется, он работает до сих пор. Это немного, но я надеюсь, что это поможет некоторым экстентам.