Pergunta

Atualmente eu uso [Authorize (Roles = ".....")] para garantir minhas ações de controlador no meu ASP.NET MVC 1 aplicativo, e esta multa funciona. No entanto, certos pontos de vista da pesquisa precisa ter botões que rota para essas ações que precisam ser ativado / desativado com base no registro selecionado na lista de pesquisa, e também os privs de segurança do usuário logado.

Por isso eu acho que precisa ter uma classe acessando uma tabela DB que referências cruzadas estes controlador alvo / ações com funções do aplicativo para determinar o estado destes botões. Isto, obviamente, fazer as coisas confuso como privs terá de ser mantida em 2 lugares - em que a classe / table DB e também sobre as ações do controlador (mais, se eu quiser alterar o acesso à ação vou ter que mudar o código e compilar em vez de apenas mudar uma entrada da tabela DB).

Idealmente, eu gostaria de estender a funcionalidade [autorizar] para que em vez de ter que especificar os papéis no código [autorizar], ele irá consultar a classe de segurança baseada no usuário, controlador e ação e que irá, em seguida, retornar um boolean permitir ou negar o acesso. Existem bons artigos sobre isso - eu não posso imaginar que é uma coisa incomum querer fazer, mas eu parecem estar lutando para encontrar nada sobre como fazê-lo (poderia ser o cérebro de segunda a manhã). Eu comecei algum código fazer isso, olhando para o artigo http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/ , e parece estar começando off ok, mas eu não consegue encontrar a maneira "correta" para obter os valores do controlador e ação que ligam dos httpContext - eu poderia falsificar um pouco de código para extraí-los a partir do URL de solicitação, mas isso não parece certo para mim e eu em vez fazê-lo corretamente.

Felicidades

MH

Foi útil?

Solução

Eu achei essa mensagem em outro fórum e assim vai postar aqui no caso de alguém acha útil. Note-se que como você faz isso muda dependendo se você estiver usando MVC 1 ou 2

a classe você cria necessidades para implementar

public void OnAuthorization(AuthorizationContext filterContext)

e, em seguida, você pode usar

string controllerName = filterContext.RouteData.Values["controller"].ToString();

e o mesmo, substituindo "ação" para "controller" (certifique-se de verificar se há valores nulos nestes valores em primeiro lugar). Em MVC 2 este pode ser alterado para filterContext.ActionDescriptor.ActionName e .ActionDescriptor.ControllerDescriptor.ControllerName e você não terá que se verificar se há valores nulos

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top