Oi pessoal,
Preciso de ajuda para estruturar minha aplicação. A principal dúvida é como estruturar o Yii para trabalhar com os usuários.
Tenho uma tabela em nested set que atende perfeitamente o meu modelo
Empresa 01
[indent]Usuário 01
Usuário 02
Usuário 03[/indent]
Empresa 02
[indent]Usuário 04
Usuário 05
Usuário 06[/indent]
Franqueadeo 01
[indent]Empresa 03
[indent]Usuário 07
Usuário 08
Usuário 09[/indent][/indent]
CREATE TABLE `usuario` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(200) NOT NULL DEFAULT '',
`login` varchar(20) NOT NULL DEFAULT '',
`senha` varchar(20) NOT NULL DEFAULT '',
`email` varchar(50) NOT NULL DEFAULT '',
`inclusao` datetime NOT NULL,
`modificacao` datetime NOT NULL,
`ativo` tinyint(1) NOT NULL,
`grupoId` int(11) NOT NULL,
`lft` int(11) NOT NULL,
`rgt` int(11) NOT NULL,
`level` int(11) NOT NULL,
`root` int(11) NOT NULL,
`rememberMe` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `login` (`login`),
UNIQUE KEY `email` (`email`),
KEY `u_grupo_id` (`grupo_id`),
CONSTRAINT `u_grupo_id` FOREIGN KEY (`grupo_id`) REFERENCES `UsuarioGrupo` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=6699 DEFAULT CHARSET=utf8;
Dessa maneira eu consigo criar uma árvore de usuários onde todos tem login / senha e estão organizados em grupos. Cada um desses usuários possui um grupoId que identifica qual tipo ele é (ex: empresa, franqueado, vendedor, básico, super administrador, etc) e cada tipo está associado a uma ROLE (usei o auth) que cria regras de acesso ao sistema.
A idéia é que quando um usuário Empresa se logar, ele verá somente os itens de menu correspondentes as permissões dele, assim como terá acesso as actions que tem direito.
Só que todos dos usuários, com exceção do Básico, terão direito a criar outros usuários que ficarão agrupados sob seu próprio id.
Supondo que um usuário tipo Franqueado esteja logado, ele verá somente os botões que tem direito e um deles será incluir usuários. Esses usuários poderão ser Empresas, que por sua vez poderão ter outros usuários Básicos associados. No caso das Empresas, o botão incluir usuários também estará visível, só que ela só poderá criar usuários Básicos.
Agora é que vem a minha dúvida…
Todas essas interações serão feitas numa mesma tabela, usuários, que já possui um Model que lista todo o conteúdo (o caso do SuperAdministrador). Não estou conseguindo entender como vou fazer com os Franqueados que só poderão visualizar, criar, editar e deletar usuários Child, ou com os usuários Empresa que seguirão a mesma lógica.
Não sei se crio um model / view / controller para cada um dos tipos de usuários, e toda vez que inventar um novo tipo, monto o mesmo esquema.
Nesse caso ficaria essa loucura
Models
[indent]FranqueadoUsuario
EmpresaUsuario
SuperadminUsuario
…[/indent]
Controllers
[indent]FranqueadoUsuarioController
EmpresaUsuarioController
SuperadminUsuarioController
…[/indent]
Views
[indent]franqueadousuario
empresausuario
superadminusuario
…[/indent]
Agora imaginem essa lógica estendida para minhas outras tabelas (estatísticas, filmes, categorias, etc). Se para cada um dos meus models eu tiver que fazer uma versão para cada um dos tipos de usuários esse aplicativo ficará gigantesco!!
Uma outra possibilidade seria criar views para cada um dos tipos de usuários o que já reduziria significativamente o volume. Ou até o bom e velho if(usuario_tipo==‘Franqueado’) {–COD DO FRANQUEADO–} elseif (…) {…} nas views do model Usuario.
O ponto é, quando se tem diferentes tipos de interação, que visualizam dados filtrados e podem fazer determinadas coisas, com forms diferentes, como estruturamos isso no Yii?
Obrigado