Vai Django ser uma boa escolha para uma base web-app permissões?

votos
12

Eu tenho vindo a explorar os detalhes de Django para cerca de uma semana agora e gosto do que vejo. No entanto eu vim em cima de algum .. negatividade em relação à multa de grãos controle de permissões para a interface CRUD.

O que eu estou escrevendo é uma gestão de clientes web-app Intranet. A organização é de cerca de 6 camadas, e eu preciso restringir o acesso a grupos de clientes com base em camadas. Em contínua expansão. Eu tenho uma boa idéia de como eu vou fazer isso, mas não tenho certeza se vou ser capaz de integrá-lo bem na interface de administração pré-construído.

Eu fiz absolutamente Django desenvolvimento zero caso contrário eu provavelmente teria uma idéia melhor sobre se isso iria funcionar ou não. Eu provavelmente não vai usar Django se a interface de administração gerado vai ser inútil para esse projeto - mas como eu disse, há uma forte dependência de permissões personalizadas refinadas.

Vai Django deixe-me construir personalizados de permissões / regras e integrá-lo perfeitamente na interface de administração CRUD?

Atualize One: Eu quero usar o aplicativo de administração para minimizar a repetição de geração de interfaces de CRUD, então sim, eu considerá-lo um deve ter.

Atualize Dois:

Eu quero descrever as permissões necessárias para este projeto.

Um cliente pode pertencer a uma ou várias das lojas . empregados a tempo inteiro só deve ser capaz de editar clientes em sua loja (mesmo se eles pertencem a uma outra loja). No entanto, eles não devem ser capazes de ver / editar clientes em uma outra loja. Casuals só deve ser capaz de ver os clientes com base no que loja estão rostered também (ou se o casual está logado como o usuário loja - mais provável).

Gestão acima deles precisa ser capaz de ver todos os funcionários para as lojas que gerem, nada mais.

A administração sênior deve ser capaz de editar todos os funcionários e conceder permissões abaixo si.

Depois de ler a documentação do Django, ele diz que você não pode (autmoatically) definir permissões para um sub-conjunto de um grupo. Apenas o grupo inteiro. É fácil o suficiente para zombar de suas próprias permissões para esta finalidade?

Publicado 24/10/2008 em 00:50
fonte usuário
Em outras línguas...                            


6 respostas

votos
7

Se eu ler seus requisitos atualizados corretamente, eu não acho que sistema de autenticação existente de Django será suficiente. Parece que você precisa de um sistema ACL full-on.

Esse assunto surgiu uma série de vezes. Tente googling em django + acl.

amostragens aleatórias ...

Houve um Summer of Code Project um par de anos atrás, mas eu não tenho certeza de onde tiraram a. veja http://code.djangoproject.com/wiki/GenericAuthorization

Há um bilhete fresco no djngoproject.org que podem ser interessantes:

Há algum código interessante snips no dumpz.org:

... mas há zero docs.

Boa sorte!

Respondeu 26/10/2008 em 00:49
fonte usuário

votos
5

O sistema de permissão Django totalmente regras. Cada modelo tem um padrão definido de permissões. Você pode adicionar novas permissões para seus modelos, também.

Cada usuário tem um conjunto de permissões, bem como os membros do grupo. Os usuários individuais podem ter permissões individuais. E eles herdam as permissões de sua participação no grupo.

Suas funções de exibição (e modelos) pode facilmente verificar a presença ou ausência de essas permissões em qualquer nível de granularidade que você precisa usar.

E se isso não for suficiente para você, o perfil add-on dá-lhe ainda mais opções para a definição de um "Usuário" e as suas capacidades, permissões, papéis, responsabilidades, etc.

E se isso não for suficiente para você, você pode definir seus próprios esquemas de autenticação.


O importante é não tentar definir grupos que são subconjuntos reais de usuários, e não casualmente títulos ou funções definidas. Você nunca precisa "definir permissões para um sub-conjunto de um grupo". Você precisa ter grupos menores. Grupos definidos em torno de subconjuntos de pessoas.

permissões padrões do Django estão em torno de acesso modelo, não remar acesso dentro de um modelo. Por outro lado, o problema é de cerca de subconjuntos de linhas em vários modelos: cliente, loja, empregado, gerente.

Você vai precisar de um conjunto básico de FK de entre esses itens, e alguns filtros para subdividir as linhas. Você pode ter problemas para fazer isso com páginas de administração padrão. Você pode precisar a sua própria versão do administrador para fazer uso de filtros especializados.


Se você não pode fazê-lo com o sistema de permissão Django, você deve repensar seus casos de uso. A sério.

[A interface Django-DESCANSO, no entanto, é um outro animal inteiramente, e requer algum cuidado e alimentação.]

Respondeu 24/10/2008 em 02:58
fonte usuário

votos
3

ModelAdmin objetos têm has_add_permission, has_change_permission, has_delete_permissione querysetmétodos que podem ser usados para aplicar permissões em torno do que o usuário logado pode ver e modificar - você pode criar uma subclasse que utiliza para impor o que quer que permissões você deseja implementar e registrar todos os seus modelos com o adminaplicativo usando sua subclasse.

No entanto, tudo depende de como exatamente seu sistema de permissões vai funcionar - quais são as necessidades exatas que caem fora de suas permissões refinadas? Quanto mais você se move longe do que o adminaplicativo foi projetado para fazer, mais trabalho que vai demorar, mas há um monte de ganchos lá que você pode usar para implementar suas necessidades personalizadas. Aqui está um post de Lucas planta que dá exemplos de alguns dos afinar você pode fazer sem ter que cavar muito fundo.

Será que absolutamente tem que ser baseada em torno da adminaplicação? Views genéricas e ModelForms pode cuidar de um monte de pedaços tediosos envolvidos na implementação de CRUD, por isso ser cauteloso de ficar muito preso a personalizar admin- é quase uma tradição Django começar por ficar pendurado sobre o adminaplicativo e o que pode e pode 't fazer, inicialmente pensando que você nunca vai ter que escrever qualquer código novamente;)

Respondeu 24/10/2008 em 01:06
fonte usuário

votos
2

De Django 1.2 não há suporte para permissões de nível de linha, que Django-tutor torna muito intuitiva de manusear.

Respondeu 10/08/2011 em 09:44
fonte usuário

votos
0

Eu apenas encontrei http://bitbucket.org/jezdez/django-authority/ , parece promissor.

Respondeu 27/08/2009 em 02:08
fonte usuário

votos
0

Você também pode querer ter um olhar para o granular permissões monkeypatch: http://code.google.com/p/django-granular-permissions/

Ele adiciona permissões de nível de linha para sistema de permissões do Django.

Respondeu 27/11/2008 em 11:40
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more