Perfil de Usuários. O perfil de usuários do sistema é baseado em grupos, estes sdão inicialmente serão gerados pelo super usuário(admin) que tem acesso nativo a todas as funçoes do sistema, e portanto, pode adcionar qualquer funcionalidade a qualquer grupo. O admin deverá criar um grupo inicial denominado Administrador que conterá todas as funcionalidades necessária para administrar o sistema e será adicionado o usuário de mesmo nome, o qual deverá ser usado para gerar o perfil inicial do sistema. Um usuário pode ser adicionado a diversos grupos herdando todas as funcionalidade dos mesmos, este usuario podera portanto fornecer as mesmas permissões a outros usuarios por ele gerenciado. Tabelas: Cria grupo de usuários, para dar permissões individuais aos usuarios icluindo automaticamente um grupo para cada usuário com o mesmo nome, os mesmos deverão aparecer na tela de gerenciamento de grupos e conterão apenas o login correspondente. CREATE TABLE pbx_grupo ( gp_id integer NOT NULL DEFAULT nextval('pbx_grupo_gp_id_seq'::regclass), gp_nome character varying(50) NOT NULL, --> Nome do grupo gp_status integer NOT NULL DEFAULT 1, --> Status 0 desativado 1 ativado user_id integer NOT NULL DEFAULT 0, --> Cria um grupo para cada usuario, para fazer permissoes individualizadas. gp_user integer NOT NULL DEFAULT 0, --> Dono do grupo, ou seja usuario que o criou. Usado para verificacao na delecao do usuario. CONSTRAINT "pkGrupId" PRIMARY KEY (gp_id), CONSTRAINT "idxGrupNome" UNIQUE (gp_nome, user_id) ); -- Index: "idxDonoGrupo" -- DROP INDEX "idxDonoGrupo"; CREATE INDEX "idxDonoGrupo" ON pbx_grupo USING btree (gp_id, gp_user); Relaciona usuários a grupos, os usuários constantes no grupo herdardão suas permissões. REATE TABLE pbx_grupo_usuario ( user_id integer NOT NULL, gp_id integer NOT NULL, CONSTRAINT "pkGpUserId" PRIMARY KEY (user_id, gp_id), CONSTRAINT "fkUsuarios" FOREIGN KEY (user_id) REFERENCES pbx_usuarios (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ); -- Index: "idxUsuariosGrupos" -- DROP INDEX "idxUsuariosGrupos"; CREATE INDEX "idxUsuariosGrupos" ON pbx_grupo_usuario USING btree (gp_id); Relaciona o grupo e suas funçoes. -- Table: pbx_grupo_funcoes -- DROP TABLE pbx_grupo_funcoes; CREATE TABLE pbx_grupo_funcoes ( gp_id integer NOT NULL, fun_id integer NOT NULL, CONSTRAINT "pkGrupoFunc" PRIMARY KEY (gp_id, fun_id) ); Regras: 1 -> O usuário pode pertencer a diversos grupos. 2 -> O usuário herda as funcionalidades de todos os grupos. 3 -> A restrissão aplicada aos ramais é um caso especial, pois irá bloquear o acesso a todos os usuários do grupo, e irá prevalecer a qualquer liberação. Para se criar um bloqueio individualizado deve-se aplicar o bloqueio apenas ao usuario em questdão. 4 -> Um usuário poderá dar o mesmo nível de permissões que possue para outros usuários. 5 -> Para se remover uma permissdão de um usuário devera faze-lo de forma recursiva removendo também dos outros usuários que herdaram suas permissões. 6 -> Para se remover um usuário deve-se verificar suas dependências.