Vários controladores para o mesmo recurso com base na função do usuário

5

Estou com problemas para criar esse aplicativo baseado em função (ou permissão) quando se trata de descobrir como lidar com ações que diferem por função de uso.

Por exemplo, nosso controlador é App\ResourceController e nós editaremos o recurso. Existem duas funções: admin e user . O admin tem permissão para editar todos os campos do recurso, enquanto o user é restrito a alguns deles .

Eu estou lutando para descobrir a melhor abordagem entre a implementação de um único controlador que manipulará os dois casos ou o roteamento da solicitação para um controlador diferente para o mesmo recurso (como App\Admin\ResourceController , App\User\ResourceController ).

O problema com a abordagem de controlador único é que ele não está apenas mostrando uma forma diferente (com campos restritos) com base na função, mas também validando campos diferentes e muito mais. O corpo do controlador seria muito parecido com uma grande declaração if-else .

O controlador múltiplo tem a abordagem correta ou existe um diferente usando permissões em vez de funções?

    
por Christopher Francisco 11.12.2015 / 17:35
fonte

2 respostas

1

Isso dependerá em grande parte do framework MVC que você está usando. O framework ASP.NET MVC no .NET, por exemplo, possui um sistema de permissões embutido (chamado roles). Você poderia usar um controlador com vários métodos:

public class ResourceController : Controller
{
    [Authorize(Roles = "User")]
    public ActionResult CreateAsUser()
    {
        // ...
    }

    [Authorize(Roles = "User")]
    [HttpPost]
    public ActionResult CreateAsUser(ResourceModel model)
    {
        // ...
    }

    [Authorize(Roles = "Admin")]
    public ActionResult CreateAsAdmin()
    {
        // ...
    }

    [Authorize(Roles = "Admin")]
    [HttpPost]
    public ActionResult CreateAsAdmin(ResourceModel model)
    {
        // ...
    }
}

Frameworks MVC com mais recursos terão algum tipo de sistema de permissões baseado em função que você pode usar. Realmente, o próximo passo é identificar o framework MVC que você está usando (ou decidir qual deles usar agora que você sabe que precisa de permissões baseadas em função) e fazer algumas pesquisas sobre como implementar essas permissões.

    
por 11.12.2015 / 19:06
fonte
0

Em geral, sua escolha deve ser por facilidade de manutenção e simplicidade. No caso em que você descreve, parece que a complexidade adicional de tentar combinar os controladores não valerá a complexidade adicional a longo prazo.

Dito isto, fazer a escolha prática entre as abordagens descritas depende do número de elementos que diferem para usuário e administrador. Se esse número for pequeno, a complexidade adicionada poderá valer a pena.

Se você estiver usando um ambiente orientado a objeto, uma terceira opção pode ser ter o App\Admin\ResourceController herdado de App\User\ResourceController .

    
por 11.12.2015 / 19:02
fonte