2016-02-26 11 views
8

Ciao ragazzi Ho visto un sacco di tutorial su Yii 2 RBAC ma non riesco davvero ad apprezzare come implementare le regole. Nella guida di Yii 2 hanno introdotto il modo in cui vengono create le regole, ma non proprio come possono essere implementate nel comportamento del controller o da qualche altra parte. Ho davvero bisogno di qualche chiarimento riguardo a questa questione.Implementazione della regola RBAC Yii2

Quello che ho ora è un sistema di caricamento di documenti in cui ho due ruoli, cioè il codificatore admin &. Fondamentalmente, il ruolo di amministratore può fare tutto mentre il ruolo dell'encoder può solo creare, visualizzare, possedere, aggiornare e possedere e cancellare. Ho già creato una regola denominata encodedBy.

Questo è il mio codice nel mio 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; 
    } } 

posso conservare i dati nella tabella 'documento' dove ho un campo denominato 'encoded_by' Spero che voi ragazzi mi può aiutare in questo. Grazie mille !!!

+0

Questo video fa un ottimo lavoro di spiegazione dell'RBAC per chiunque non sia sicuro di come funziona: https://www.youtube.com/watch?v = vLb8YATO-HU – TheStoryCoder

risposta

2

Se ho capito bene, si desidera utilizzare la regola Yii2 RBAC per implementare alcune autorizzazioni sugli utenti del sistema (Admin e codificatore). Bene, questo è abbastanza semplice in una certa misura

Yii2 ha tabelle esistenti per questo scopo. Queste tabelle sono i. auth_assignment ii. auth_item iii. auth_item_child iv. auth_rule

prima cosa che devi fare è scegliere quale AuthManager si desidera utilizzare il PhpManager o DBManager ma io vi consiglio di usare la ragione DBManager è che, è ciò che io uso

Se si utilizza il modello Yii2 di base, aggiungere le seguenti righe di codice sotto componenti web.php

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

Se Yii2 avanzato modello, aggiungere le righe di codice di seguito nella sezione componenti main.php all'interno della cartella config \ common \

Dopo aver fatto il detto sopra passi,

  • Run Yii migrare --migrationPath = @ yii/rbac/migrazioni dalla riga di comando

Il codice di cui sopra genererà/creano i quattro tabelle che è stato precedentemente elencato automaticamente all'interno del database per voi

Per creare le regole RBAC.

Ciò richiede la creazione di autorizzazioni e ruoli.

Per modello di base,

  • Creare un file e il nome RbacController.php all'interno comanda cartella

Vedi http://pastebin.com/RAKpZX2J per vedere come sembra

Per modello avanzato, - Crea lo stesso file ma invece sarà all'interno di console \ controller \ RbacController.php

Dopo aver fatto tutto questo,

  • Run Yii rbac/init // Questo willl eseguire l'actionInit() all'interno del file RbacController

se con successo creato tutte detto sopra, la si può fare qualcosa di simile per sapere se un utente ha il permesso

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

} 

Spero che questo aiuti ..

+3

Grazie ma che ne dici delle regole? questo è per la creazione di ruoli e permessi, ho già questo. Il mio problema è come implementare le regole nel controller ??? –

+0

@C. Norris, hai usato le regole, se sì, puoi pubblicare un esempio per favore? – Ludo

0

Se si richiede un semplice controllo dei ruoli, è possibile estendere la classe AccessRule per adattarsi ai nuovi ruoli senza scavare in un controllo di accesso basato sui ruoli completo. Controlla questo tutorial per i dettagli completi: Simpler Role Based Authorization in Yii 2.0

Questo è il modo più semplice che ho scoperto per comprendere, implementare e gestire i ruoli, tuttavia potrai trarre vantaggio dall'ampia flessibilità fornita da RBAC completo per semplicità.

Full disclosure: Sono l'autore del post sul blog.

1

Anche io sto lottando con questo. Tutto quello che riuscivo a capire fino ad ora, che $params['post'] non funziona assolutamente per me. Non ho idea di dove - cosa dovrei definire per farlo funzionare. Ma quello che potrei capire based on the post of Joel Small, che se sto facendo semplicemente così (voglio semplicemente negare l'accesso a un modulo di aggiornamento in caso di alcune circostanze riguardanti lo stato del modello):

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; 
    } 
} 

e poi in 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.'); 
    } 

ho definito in yii2-admin che ho una regola :

nome: ZnwRule

classe: app \ RBAC \ ZnwRule

e ho creato un permesso chiamato updatezd:

nome: updatezd

regola: ZnwRule

Ho avviato la mia app con un controller principale dove sto controllando se il percorso è consentito in yii2-admin o no per un certo ruolo, e tutti gli altri controller estendono questo. Ora che avevo a che fare con le autorizzazioni e , ho dovuto aggiungere il percorso anche all'autorizzazione. Sono sicuro che può essere più facile da realizzare, ma almeno sembra funzionare fino ad ora. Non è molto, ma spero che aiuti in parte.

Problemi correlati