Controle de acesso através de tabela definida no MySQL

Olá. Sou novo com a Framework e estou tendo algumas dúvidas referentes ao controle de acesso dos usuários no meu sistema. Tenho o seguinte cenário:

Possuo uma tabela ‘PermissaoTela’ com a seguinte estrutura:

@id (int PK)

Inserir (Boolean)

Deletar (Boolean)

Alterar (Boolean)

PerfilId (int FK)

TelaId (int FK)

Minha idéia seria setar as ações (Inserir, Deletar e Alterar) para cada tipo de perfil (PerfilId) em cada tela (TelaId). Por exemplo:

  • Na tela Funcionário, o perfil Analista pode inserir, deletar e alterar.

  • Na tela Dias da Semana, o perfil Analista pode apenas inserir. (E assim por diante).

Como faria este controle utilizando o accessRules da Controller ??

Desde já, grato.

Raphael Prado de Oliveira

Olá Raphael, seja bem-vindo!

Você vai separar os usuários por papel (funcionário, analista, etc.), minha sugestão é que analise este texto que fala sobre o controle de acesso baseado em papéis: http://www.yiiframework.com/doc/guide/1.1/pt_br/topics.auth#sec-4

Basta colocar no controle de acesso de cada controller, para cada action se reportar aos usuários que possuem permissão.

Dinamicamente falando, faça uma função estática no model de usuário que retorne uma array com os nomes de usuários com a permissão.

Exemplo:

public function accessRules()

{


	return array(


			array('allow',


		        'actions'=>array('create'),


					'users'=>array(Model::funcaoretornausuarioscompermissaopara('create')),


			),


	);


}

E no model, ou onde você queira por, uma função que retorne os usuários com a permissão:

Ex num controller:

public static function funcaoretornausuarioscompermissaopara($acao) {

  return Model::model()->findAllByAttributes(array('permissoes'=>$acao));

}

Algo do tipo. Codei aqui, desculpa qualquer erro.

Abraços