Fórum projeto site do advogado #948

01/12/2008

0

Nome do projeto: SITE DO ADVOGADO Resp: Wagner Siqueira. Data início: 01/12/2008 Tecnologia utilizada: asp.net c# , mssql 2005, visual studio 2008 ----   Estamos começando a desenvolver um sistema online denominado SITEDOADVOGADO, que funcionará da seguinte maneira:   area administrativa do sistema - cadastro de processos - clientes - servicos - financeiro - GED - funcionarios       area do cliente do advogado - visualizacao dos processos -visualização de movimentação     Na area administrativa do sistema o advogado responsavel podera cadastrar clientes e funcionarios. esses funcionarios poderao ter permissao de visualização de telas, alteração e exclusao de registros.   A duvida é: Qual seria a melhor maneira de projetar o sistema para ter esse controle por telas, menus e por acesso a botoes em telas para que o administrador do sistema possa dar acesso a usuarios e grupos de usuários. Como eu faria esse controle de telas e botoes não permitindo que outros usuarios visualizem telas e/ou  botoes no qual nao tem direito.  lembrando que o sistema é online utilizando webforms asp.net com linguagem de programção c#.  
Valter Ferreira

Valter Ferreira

Responder

Posts

01/12/2008

Luiz Maia

Olá Valter,   A primeira coisa a fazer é modelar seu sistema de tal forma que seja possível desenvolver um nível de permissão para usuário bem específico. Sendo assim, uma maneira simples e que vai suprir suas necessidades é criando acessos para GRUPOS, onde cada grupo terá acesso a determinadas telas e determinados botões, e seus usuários serão inseridos nestes grupos.   Assim que o usuário logar no sistema, você deverá instanciar uma Session que recupera o GRUPO que o mesmo pertence cadastro no seu banco de dados.   Para cada grupo você deverá fazer o cadastro das telas e botões que o mesmo terá acesso, sendo que você também pode definir o tipo de acesso: Escrita, leitura ou nenhum.   De posse destas informações, que não vou entrar nos méritos de cadastro de usuários e como instanciar um GRUPO para os usuários, a primeira coisa a fazer é cadastrar o que eu vou chamar de SESSÕES de acesso, você deve criar uma tabela para tal:     Ex:  Tabela SESSAO: Cod_sessao int; Nom_Sessao varchar(255);   Montar a tela de cadastro: INSERT INTO SESSAO VALUES (1, ADMINISTRADOR); INSERT INTO SESSAO VALUES (2, ADVOGADO); INSERT INTO SESSAO VALUES (3, ESTAGIARIO);   Então, um usuário fará parte de um grupo e este grupo terá diferentes tipos de combinação de acessos.   Estou desenvolvendo um exemplo pratico e te envio em breve.   Att, Luiz Maia
Responder

Gostei + 0

01/12/2008

Luiz Maia

Olá Valter,   Dando continuado ao desenvolvimento, segue a modelagem da parte de Perfil:       Seguindo o raciocínio: Cada usuário terá um ID que identifica qual Perfil o mesmo pertence; Na tabela SESSAO estarão todas as sessões (telas, botões e ECT); Na tabela GRUPO_SESSAO, você terá as associações, por exemplo: 1.    O Perfil de Advogado terá os seguintes acessos: ·         Na Sessão NOM_SESSAO = ‘Cadastros Basicos’ onde seu COD_SESSAO = 1, o Perfil de ‘ADVOGADO’ terá acesso de escrita, ou seja IND_PERMISSAO = ‘E’   ·         Na Sessão NOM_SESSAO = ‘Relatorios’ onde seu COD_SESSAO = 2, o Perfil de ‘ADVOGADO’ terá acesso de leitura, ou seja IND_PERMISSAO = ‘L’   ·         Na Sessão NOM_SESSAO = ‘Cadastro de Usuario’ onde seu COD_SESSAO = 3, o Perfil de ‘ADVOGADO’ terá acesso negado, ou seja IND_PERMISSAO = ‘N’   Desde modo, você poderá customizar ao máximo seus webforms aspx da seguinte maneira:     protected void Page_Load(object sender, EventArgs e)     {         if (!IsPostBack)         {             ConferePerfil();         }     }       protected void ConferePerfil()     {         // Nome da url da pagina         string dscPagina = "admin/cadastro1";         int codUsuario = Sessao.Usuario.IdUsuario;         char indPermissao = BusinessLogicLayerComponent.Perfil.Permissao(codUsuario, dscPagina);           switch (indPermissao)         {             case N: // Sem permissão na tela                 btnExcluir.Enabled = false;                 btnExcluir.ToolTip = "Sem permissão para esta ação.";                 btnSalvar.Enabled = false;                 btnSalvar.ToolTip = "Sem permissão para esta ação.";                 Response.Redirect("../AcessoNegado.aspx");                 break;             case L: // Permissão de somente leitura                 btnExcluir.Enabled = false;                 btnExcluir.ToolTip = "Sem permissão para esta ação.";                 btnSalvar.Enabled = false;                 btnSalvar.ToolTip = "Sem permissão para esta ação.";                 break;             case S: // Permissão de salvar e editar                 btnExcluir.Enabled = false;                 btnExcluir.ToolTip = "Sem permissão para esta ação.";                 btnSalvar.Enabled = true;                 btnSalvar.ToolTip = "Salvar";                 break;             case E: // Permissao de exclusao                 btnExcluir.Enabled = true;                 btnExcluir.ToolTip = "Excluir";                 btnSalvar.Enabled = false;                 btnSalvar.ToolTip = "Sem permissão para esta ação.";                 break;             case T: // Permissão total                 btnExcluir.Enabled = true;                 btnExcluir.ToolTip = "Excluir";                 btnSalvar.Enabled = true;                 btnSalvar.ToolTip = "Salvar.";                 break;             default:                 btnExcluir.Enabled = false;                 btnExcluir.ToolTip = "Sem permissão para esta ação.";                 btnSalvar.Enabled = false;                 btnSalvar.ToolTip = "Sem permissão para esta ação.";                 break;         }     }   Método que busca o tipo de permissão na camada lógica:         public static char Permissao(int codUsuario, string dscPagina)         {             return DALC.Perfil.Permissao(codUsuario, dscPagina);         } Método que busca o tipo de permissão na camada de dados:         public static char Permissao(int codUsuario, string dscPagina)         {               string codSessao = "";             codSessao = RetornaCodigoSessao(dscPagina);               Entity.DataClassesDataContext dataClass = new Entity.DataClassesDataContext();               var pa = from gs in dataClass.GRUPO_SESSAOs                      join pf in dataClass.Perfils on gs.PER_SEQ equals pf.Id                      join us in dataClass.Usuarios on gs.PER_SEQ equals us.IdPerfil                      join ss in dataClass.SESSAOs on gs.COD_SESSAO equals ss.COD_SESSAO                      where                         (us.Id.Equals(codUsuario)) &&                         (ss.COD_SESSAO.Equals(codSessao))                      select new                      {                          IndPermissao = gs.IND_PERMISSAO                      };               try             {                 return pa.First().IndPermissao;             }             catch             {                 return N;             }         }   Método que retorna o código da Sessão usado acima para trazer em qual sessão a página acessada se encontra:         // Este método deve OBRIGATORIAMENTE ser sincronizado com a base de dados         // Tabela: "dbo".sessao         private static string RetornaCodigoSessao(string PaginaAtual)         {             string codSessao = "";               if (PaginaAtual != null)             {                   //Cadastros: Atividade                 else if (PaginaAtual.ToLower().IndexOf("atividade/cadastraratividade") != -1) codSessao = "01";                 else if (PaginaAtual.ToLower().IndexOf("atividade/pesquisaratividade") != -1) codSessao = "01";                   //Cadastros: Cargo                 else if (PaginaAtual.ToLower().IndexOf("cargo/cadastrarcargo") != -1) codSessao = "02";                 else if (PaginaAtual.ToLower().IndexOf("cargo/pesquisarcargo") != -1) codSessao = "02";                   //Cadastros: Estado                 else if (PaginaAtual.ToLower().IndexOf("estado/cadastrarestado") != -1) codSessao = "03";                 else if (PaginaAtual.ToLower().IndexOf("estado/pesquisarestado") != -1) codSessao = "03";                   //Cadastros: Municipio                 else if (PaginaAtual.ToLower().IndexOf("municipio/cadastrarmunicipio") != -1) codSessao = "04";                 else if (PaginaAtual.ToLower().IndexOf("municipio/pesquisarmunicipio") != -1) codSessao = "04";                   //Cadastros: Perfil                 else if (PaginaAtual.ToLower().IndexOf("perfil/cadastrarperfil") != -1) codSessao = "05";                 else if (PaginaAtual.ToLower().IndexOf("perfil/pesquisarperfil") != -1) codSessao = "05";                 else if (PaginaAtual.ToLower().IndexOf("perfil/cadastrarpermissoes") != -1) codSessao = "05";                   //Cadastros: Projeto                 else if (PaginaAtual.ToLower().IndexOf("projeto/cadastrarprojeto") != -1) codSessao = "06";                 else if (PaginaAtual.ToLower().IndexOf("projeto/pesquisarprojeto") != -1) codSessao = "06";                 else if (PaginaAtual.ToLower().IndexOf("projeto/cadastraratividade") != -1) codSessao = "06";                 else if (PaginaAtual.ToLower().IndexOf("projeto/pesquisaratividade") != -1) codSessao = "06";               }               return codSessao;         }   Agora é so montar uma tela onde o ADMINISTRADOR fará as associações para os Perfis/Telas, como sugestão segue a estrutura: Onde: lbPerfil = Perfil a ser editado Salvar = botão que salva as configurações Grid[Código] = Código da sessão na base de dados (tabela SESSAO) Grid[Sessão] = Nome da sessão na base de dados (tabela SESSAO) Grid[Permissões] = Dropdownlist com opções de acesso (Escrita, leitura, nenhuma, total e etc) Todo o código será disponibilizado para você numa área de FTP. Sei que pode parecer um pouco complicado agora, mas assim que iniciar o desenvolvimento vai perceber os macetes para codificação. Estou usando o MS Linq nos exemplos, sugiro que uso o mesmo no seu projeto, qualquer dúvida existem vários videos e artigos no site sobre o mesmo. Aguardo seu retorno e estou a disposição para qualquer dúvida. Abraços Luiz Maia
Responder

Gostei + 0

02/12/2008

Luiz Maia

Olá Valter,   Segue o link com o código fonte do qual mencionei no post anterior.   http://video.devmedia.com.br/naoexclusivo/LuizMaia/Consultoria/Chamado948-LuizMaia.zip   Aguardo seu retorno. Abraços   Att, Luiz Maia
Responder

Gostei + 0

02/12/2008

Luiz Maia

Olá Valter,   Considerando que não obtivemos retorno, estamos considerando o chamado encerrado. De qualquer forma continuamos a sua disposição para eventuais dúvidas.   Abraços   Att, Luiz Maia
Responder

Gostei + 0

05/12/2008

Valter Ferreira

desculpe a demora pela resposta. estava viajando. Obrigado, vou testar aqui, qualquer duvida abro outro chamado.
Responder

Gostei + 0

05/12/2008

Luiz Maia

Blz Valter,   Estamos a disposição.   Abraços Att, Luiz Maia
Responder

Gostei + 0

06/12/2008

Luiz Maia

Valter,   Espero que tenha resolvido seu problema. De qualquer forma, continuamos a sua disposição para qualquer dúvida.   Abraços Att, Luiz Maia
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar