none
Criar Regras por perfil de usuarios RRS feed

  • Pergunta

  • Bom dia!

    Estou desenvolvendo um projeto web MVC3, eu tenho duas tabelas de controle. Uma de usuario e outra de permissões, cada usuario está ligado a uma permissão. Ex: usuario 1 está na permissão 1.

    Gostaria de saber se existe alguma roles disponveis na controller para poder dar permissão para acessos do site. Ou seja na area de cadastrar o usuario 1 com a permissão 1 pode acessar todas as areas mas o usuario 2 com a permissão 2 não pode.

    Alguem teria algum exemplo para poder da continuidade no sistema.

    Grato,

    eu cheguei a utulizar isso na controller mas não consegui identificar como ele defini que o usuario faz parte daquela regra. ex.

    [Authorize(Roles = "administrador")]
            public ActionResult Index()
            {
                return View();
            }

    • Movido Olavo Oliveira Neto quinta-feira, 15 de março de 2012 15:51 Amigo, estou movendo sua thread para um fórum especifico de MVC (De:.NET Development - Geral)
    quinta-feira, 15 de março de 2012 13:00

Respostas

  • Cleiton, essas regras são definidas pelo Role Provider.

    Para criar regras e atribuir usuários a elas, clique no icon ASP.NET Configuration (é um globo com um martelo), vai abrir uma pagina de configuração, vá até a aba security e habilite o Role Provider, aí é só criar as roles e definir para cada usuário e correr pro abraço.

    Dê uma estudada sobre o Membership, Role e Profile Provider. Você vai gostar!

    Abs


    Wladiston Paiva - @wladiston - Microsoft MCTS, MTA

    sexta-feira, 16 de março de 2012 19:09
  • Cara!! Na minha aplicação eu utilizo da seguinte maneira

    [FiltroLogin]
        public class ClienteController : Controller
        {

    aqui eu uso na chamado do controller

        }

    Meu filtro é definido como em uma classe que faz a verificação direto no meu banco

                

    public class FiltroLogin : ActionFilterAttribute
        {
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                var controller = filterContext.Controller;
                var user = filterContext.HttpContext.User.Identity;

                if (!user.IsAuthenticated)
                {
                    filterContext.Result = new RedirectResult("~/Usuario/LogOn");
                }
                base.OnActionExecuting(filterContext);
            }

        public class FiltroColaborador : ActionFilterAttribute
        {
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                var controller = filterContext.Controller;
                var user = filterContext.HttpContext.User.Identity;

                RepositorioUsuario _repositorioUsuario = new RepositorioUsuario();
                var usuario = _repositorioUsuario.UsuarioPorEmail(user.Name);
                if (usuario.Tipo == 3)
                {
                    filterContext.Result = new RedirectResult("~/Home/SemPermissao");
                }
                base.OnActionExecuting(filterContext);
            }

    }

    Qualquer duvida!! Espero ter ajudado...

    terça-feira, 29 de maio de 2012 13:27

Todas as Respostas

  • Ola Cleiton,

    Segue um link que pode te ajudar

    http://www.macoratti.net/10/08/aspn_aut1.htm

    abraços

    quinta-feira, 15 de março de 2012 17:00
  • Ola Oliveira ,

    Eu já estou conseguindo pegar o usuario e o grupo que ele pertence na controller eu queria saber como passar para   

    [Authorize(Roles = "administrador")] .

    Grato,

    quinta-feira, 15 de março de 2012 18:16
  • Fala Cleiton,

    Então cara você já definiu as regras de autorização no web.config?

    lembre que os nomes das regras são case sensitive, ou seja, diferencia maiúscula de minúscula

    Ve se este link pode te ajudar http://danielfonsecacastro.com.br/2009/11/28/asp-net-mvc-action-filters/

    Se não funcionar crie um filtro próprio para fazer isto:

    http://msdn.microsoft.com/pt-br/library/dd410056.aspx

    abraços

     


    sexta-feira, 16 de março de 2012 00:31
  • Cleiton, essas regras são definidas pelo Role Provider.

    Para criar regras e atribuir usuários a elas, clique no icon ASP.NET Configuration (é um globo com um martelo), vai abrir uma pagina de configuração, vá até a aba security e habilite o Role Provider, aí é só criar as roles e definir para cada usuário e correr pro abraço.

    Dê uma estudada sobre o Membership, Role e Profile Provider. Você vai gostar!

    Abs


    Wladiston Paiva - @wladiston - Microsoft MCTS, MTA

    sexta-feira, 16 de março de 2012 19:09
  • Wladiston, obrigado pela dica mas não estou conseguindo acessar o asp.net Configuration ele está me dando este erro

    The following message may help in diagnosing the problem: The method or operation is not implemented.

    Procurei na net mas tudo que tem de orientação não deu certo. Eu estou usando Entity Framework.  4.1 , será que pode ser isso?

    Grato,

    segunda-feira, 19 de março de 2012 18:04
  • Será que alguem tem alguma alternativa, eu tenho uma tabela usuarios e regras, criei um relacionamento entre as duas . Criei uma classe que quando logado eu consio pegar o usuario e qual regra ele pertence. Agora gostaria de saber se eu consigo tratrar isso para poder esconder os menus e não permitir que ele acesse via browser também. Alguem teria um dica para isso?

    Grato,

    segunda-feira, 19 de março de 2012 18:15
  • cleiton costa, com certeza nao é por causa do EF 4.1.

    Tente executar isso:

    "First check if you have an aspnetdb.mdf under the App_Data subfolder of that you previously set up the needed tables for the application services in another database.

    If you haven't got these then build the solution and navigate to the page which has the login control on it. Normally ASP.NET will generate the needed database aspnetdb.mdfin the App_Data folder. Once you have that database you should be able to use the configuration which starts a web application with which you can create your users and define the roles to which they belong."

    Fonte: http://stackoverflow.com/questions/3143411/vs2010-asp-net-configuration-wont-open


    Wladiston Paiva - @wladiston - Microsoft MCTS, MTA

    terça-feira, 20 de março de 2012 11:57
  • Outro detalhe tbm é que o ASP.NET Configuration só funciona no IE.. então nada de tentar executar ele no Firefox.

    Wladiston Paiva - @wladiston - Microsoft MCTS, MTA

    terça-feira, 20 de março de 2012 11:58
  • Então dever ser isso, estou execuntando firefox.

    Wladiston eu consegui criar meu próprio metodo que herda RoleProvider, e chamei ele na controller passando a o nome da regra.

     [Filtro(Roles="usuario,administrador")].  e no Layout eu valido para esconder ou não o menu.

    @if (Perfil.Equals("administrador"))
                            {
                                <li>@Html.ActionLink("Empreendimentos", "Index", "Empreendimentos")</li>
                                <li>@Html.ActionLink("Listar", "Listar", "Empreendimentos")</li>
                                <li>@Html.ActionLink("Cadastrar", "Create", "Empreendimentos")</li>
                            }

    Fica ai a Dica, Mas muito obrigado pelo apoio, eu tentar usar o IE para fazer um teste.

    Grato,

    • Sugerido como Resposta Mauricio P.d quarta-feira, 21 de março de 2012 17:57
    quarta-feira, 21 de março de 2012 17:33
  • Cleiton, minha necessidade é parecida com a sua, e estou engatinhando em MVC, precisava de uma luz.

    Já tenho uma procedure que me retorna uma lista com os módulos de acordo com o perfil de usuário e preciso montar o menu com esses módulos e o menu fica na masterpage, mas não sei como fazer, como montar o menu depois que o usuário logar.

    Se alguém puder me ajudar agradeço.
    segunda-feira, 9 de abril de 2012 02:25
  • Fabio desculpa a demora, bom para voce mostrar e sumir os menus é só voce montar assim

    @if (Perfil.Equals("administrador"))

    {

    <li>@Html.ActionLink("Empreendimentos", "Index", "Empreendimentos")

    </li> <li>@Html.ActionLink("Listar", "Listar", "Empreendimentos")</li>

    <li>@Html.ActionLink("Cadastrar", "Create", "Empreendimentos")</li>

    } @if(Perfil.Equals("usuarioNormal")) { <li>@Html.ActionLink("Listar","Listar","Empreendimentos")</li> }





    segunda-feira, 16 de abril de 2012 16:57
  • Cara!! Na minha aplicação eu utilizo da seguinte maneira

    [FiltroLogin]
        public class ClienteController : Controller
        {

    aqui eu uso na chamado do controller

        }

    Meu filtro é definido como em uma classe que faz a verificação direto no meu banco

                

    public class FiltroLogin : ActionFilterAttribute
        {
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                var controller = filterContext.Controller;
                var user = filterContext.HttpContext.User.Identity;

                if (!user.IsAuthenticated)
                {
                    filterContext.Result = new RedirectResult("~/Usuario/LogOn");
                }
                base.OnActionExecuting(filterContext);
            }

        public class FiltroColaborador : ActionFilterAttribute
        {
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                var controller = filterContext.Controller;
                var user = filterContext.HttpContext.User.Identity;

                RepositorioUsuario _repositorioUsuario = new RepositorioUsuario();
                var usuario = _repositorioUsuario.UsuarioPorEmail(user.Name);
                if (usuario.Tipo == 3)
                {
                    filterContext.Result = new RedirectResult("~/Home/SemPermissao");
                }
                base.OnActionExecuting(filterContext);
            }

    }

    Qualquer duvida!! Espero ter ajudado...

    terça-feira, 29 de maio de 2012 13:27