Erro ao criar Autorizações usando o Console Yii2

87 views
Skip to first unread message

Cálcio

unread,
May 1, 2015, 12:16:05 PM5/1/15
to yii-framew...@googlegroups.com
Boa tarde galera, estou seguindo um tutorial do próprio manual do Yii2 (http://www.yiiframework.com/doc-2.0/guide-security-authorization.html). Criei o controller como no exemplo, mas na hora de executar o comando yii rbac/init ele exibe os erros abaixo.


php yii rbac/init
Exception 'yii\base\UnknownClassException' with message 'Unable to find 'console\controllers\RbacController' in file: /home/calcio/www/yii2/console/controllers/RbacController.php. Namespace missing?'

in /home/calcio/www/yii2/vendor/yiisoft/yii2/BaseYii.php:291

Stack trace:
#0 [internal function]: yii\BaseYii::autoload('console\control...')
#1 [internal function]: spl_autoload_call('console\control...')
#2 /home/calcio/www/yii2/vendor/yiisoft/yii2/base/Module.php(563): class_exists('console\control...')
#3 /home/calcio/www/yii2/vendor/yiisoft/yii2/base/Module.php(521): yii\base\Module->createControllerByID('rbac')
#4 /home/calcio/www/yii2/vendor/yiisoft/yii2/base/Module.php(449): yii\base\Module->createController('rbac/init')
#5 /home/calcio/www/yii2/vendor/yiisoft/yii2/console/Application.php(161): yii\base\Module->runAction('rbac/init', Array)
#6 /home/calcio/www/yii2/vendor/yiisoft/yii2/console/Application.php(137): yii\console\Application->runAction('rbac/init', Array)
#7 /home/calcio/www/yii2/vendor/yiisoft/yii2/base/Application.php(375): yii\console\Application->handleRequest(Object(yii\console\Request))
#8 /home/calcio/www/yii2/yii(31): yii\base\Application->run()
#9 {main}

Meu Controller

<?php

namespace app\commands;

use Yii;
use yii\console\Controller;

class RbacController extends Controller
{
   
public function actionInit()
   
{
        $auth
= Yii::$app->authManager;

       
// add "createSessao" permission
        $createSessao
= $auth->createPermission('createSessao');
        $createSessao
->description = 'Cria uma sessao (ata)';
        $auth
->add($createSessao);

       
// add "updateSessao" permission
        $updateSessao
= $auth->createPermission('updateSessao');
        $updateSessao
->description = 'Atualiza uma sessao (ata)';
        $auth
->add($updateSessao);

       
// add "secretario" role and give this role the "createSessao" permission
        $secretario
= $auth->createRole('secretario');
        $auth
->add($secretario);
        $auth
->addChild($secretario, $createSessao);
        $auth
->addChild($secretario, $updateSessao);

       
// add "secretario" role and give this role the "updadeSessao" permission
       
// $secretario = $auth->createRole('secretario');
       
// $auth->add($secretario);
       
// $auth->addChild($secretario, $updateSessao);

       
// Assign roles to users. 1 and 2 are IDs returned by IdentityInterface::getId()
       
// usually implemented in your User model.
        $auth
->assign($secretario, 1);
   
}
}



Cálcio

unread,
May 2, 2015, 2:13:15 PM5/2/15
to yii-framew...@googlegroups.com
Descobri o motivo do erro. No maldito do manual está namespace app\commands;
e é par ser namespace console\commands;. (Pq esse maldito não especificou direto, uma vez que é algo bem específico?)

Uma dúvida que me restou é: Por que a tabela auth_rule que é gerada pelo migrate não é usada? E qnd ela é usada?

Sidney

unread,
May 2, 2015, 5:04:41 PM5/2/15
to yii-framew...@googlegroups.com
Cálcio,

Não trabalhei com RBac no Yii2 ainda (estou brincando de android/java :) por enquanto) mas...

Sobre o app\commands, geralmente vc vai ver isso nos tuts pq app aí significa seu diretório raiz quando está trabalhando com o projeto BASIC. Mas quando está trabalhando com o ADVANCED, precisa substituir o caminho app por um dos ends (front, back, common ou console). Todos os exemplos que já vi precisaram dessa "correção".

E quanto à tabela, ali ficarão suas regras, portanto, será usada quando seu sistema usar uma regra, o que no Yii2 geralmente ocorre ao chamar o $user->can();

Espero que tenha ajudado. Abraço.

Atenciosamente,
Sidney Lins
------

--
YFB - Yii Framework Brasil
04/2011: Anexos de até 250kb foram autorizados pelos membros da lista. Use com moderação.
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-br...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/yii-framework-brasil/946df92b-943a-44e5-aafc-fb6538a77405%40googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

Cálcio

unread,
May 4, 2015, 7:58:44 AM5/4/15
to yii-framew...@googlegroups.com
Fala aí Sidiney.
Não entendi bem oq explicou sobre a tabela auth_rule. Pois somente as outras 3 tabelas populadas o RBAC funciona. Uma coisa que percebi pela documentação o teste é perto por papel, ex. 'criarUsuario' e não feito pelo grupo ex. 'admin' que tem o papel 'criarUsuario'. É isso mesmo? não da para testar pelo grupo?

Sidney

unread,
May 4, 2015, 12:43:59 PM5/4/15
to yii-framew...@googlegroups.com
Foi mal. Misturei algumas coisas. Auth_rule é para regras mais específicas, especialmente para criar lógica mais apurada (Veja o link [1]). Porém, é no User::can() que ela será verificada, como informei antes.

criarUsuario é uma permissão. Admin é um papel (role). criarUsuárioSomenteDas10hAs14h seria uma rule (regra mais específica que citei).

Após o usuário ser identificado, o Yii verifica se existe a permissão diretamente ligada a ele, se não, ele checa os roles (papéis) desse usuário e verifica se existe a permissão ligada a um dos roles (papéis) desse usuário. Se houver alguma regra (rUle) relacionado a um papel ou a uma permissão, ela também será testada.

Veja exemplos no link abaixo, e na página como um todo:
[1] http://www.yiiframework.com/doc-2.0/guide-security-authorization.html#using-rules

Estou em horário de almoço, mas espero que o acima ajude.


Atenciosamente,
Sidney Lins
------

Em 4 de maio de 2015 08:58, Cálcio <calc...@gmail.com> escreveu:
Fala aí Sidiney.
Não entendi bem oq explicou sobre a tabela auth_rule. Pois somente as outras 3 tabelas populadas o RBAC funciona. Uma coisa que percebi pela documentação o teste é perto por papel, ex. 'criarUsuario' e não feito pelo grupo ex. 'admin' que tem o papel 'criarUsuario'. É isso mesmo? não da para testar pelo grupo?

--
YFB - Yii Framework Brasil
04/2011: Anexos de até 250kb foram autorizados pelos membros da lista. Use com moderação.
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-br...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages