Array
(
)

Membership - mostrar/ocultar menus de acordo com as roles

Wanderley Saijo
   - 16 jul 2011

Já desenvolvi as rotinas de criação/alteração/exclusão de usuários (Membership.CreateUser, Membership.GetUser, Membership.UpdateUser, MembershipUser.ChangePassword), de atribuição de roles (Roles.AddUserToRole, Roles.GetRolesForUser, Roles.GetAllRoles).
 
Agora preciso e não sei como fazer:

1. Ler as autorizações de acesso (armazenadas no web.config) e mostrar/ocultar os respectivos menus de acesso aos cadastros. Por exemplo, quero acessar todos os "locations path" como listado abaixo e ler as roles habilitadas/desabilitadas, de forma a mostrar ou ocultar os items de menu, assim o usuário de um grupo (role) que não tem acesso a determinado cadastro, nem visualiza o menu de acesso ao cadastro.

          <location path="Cadastros/Alunos.aspx">
                <system.web>
                    <authorization>
                        <deny users="?"/>
                        <allow roles="Coordenação"/>
                        <deny users="*"/>
                    </authorization>
                </system.web>
            </location>

2. Como faço para criar/excluir uma entrada <location path> via código?

Abraços

Paulo Freire
|
MVP
    19 jul 2011

Porque vc não confere as regras ao acessar as páginas ao invés de trabalhar com Web.Config, prefiro trabalhar assim:
No code-behind da pagina Aluno.aspx

        protected void Page_Load(object sender, EventArgs e)        {
            if (!Roles.IsUserInRole("Coordenação"))                Response.Redirect("ErroPermissao.aspx");

Ai eu direciono para uma pagina onde tem uma mensagem de erro de acesso, vc poderá colocar um MessageBox, sei lá.
Qualquer coisa, grita ai, ok

Shalom Adonai
Paulo Freire

Rodrigo Odasaki
   - 03 dez 2011

Você pode colocar um menu diferente de acordo com o perfil e deixar dentro de um Panel.

No método PageLoad colocar para subir todos com o Visibile false.
Coloca como true somente de acordo com o usuário logado.

Eu não faria assim, mas como você está fazendo dessa forma, acho que a forma mais simples seria esta.