/ / django-objeto-permissões Vs django-guardian Vs django-Authority - django, django-authentication, django-apps, django-permissions

django-object-permissions Vs django-guardião Vs django-autoridade - django, django-autenticação, django-apps, django-permissions

Eu encontrei 3 soluções de permissão em nível de linha para o Django 1.2+

Alguém poderia dizer se há mais recomendações do que as outras, quais são suas principais diferenças, etc.?

Respostas:

24 para resposta № 1

Vou começar dizendo que não usamos nenhum dessespara permissão no nível do objeto - usamos nosso próprio método personalizado e eu realmente gostaria que não o tivéssemos. Se você pode evitar permissões no nível do objeto, faça isso, elas são uma tarefa difícil de organizar.

É assim que eu avalio os três aplicativos que você mencionou.

Desenvolvimento ativo:

  1. django-guardian (1 semana atrás)
  2. django-object-Permissions (1 ano atrás)
  3. django-Authority (quase 2 anos atrás)

API

  1. django-guardian (salva uma instância de um modelo definido)
  2. django-object-permissions (permissões de registro)
  3. autoridade-django (define classes)

A descrição acima está em ordem pelo caminho.

Eu recomendo o tutor exclusivamente na API, mas o fato de ainda estar sendo desenvolvido onde os outros não costumam significar uma grande vitória.


17 for answer № 2

Quanto a agosto "13, django-object-Permissions foi substituído por permissão do django. Os três projetos estão em desenvolvimento ativo.

Pessoalmente, prefiro autoridade ou permissão, que usa métodos para verificar permissões (tempo de execução), em vez do django-guardian, que usa base de dados para manter as permissões (anexadas na criação do objeto, por exemplo).

- EDIT -

Exemplos dos documentos.

django-guardião

joe = User.objects.create(username="joe")
task = Task.objects.create(summary="Some job", content="", reported_by=boss)
joe.has_perm("view_task", task)
>> False
assign_perm("view_task", joe, task)
joe.has_perm("view_task", task)
>> True

Você atribui a permissão e a mantém no banco de dados.

autoridade django

Declaração:

class FlatpagePermission(permissions.BasePermission):
label = "flatpage_permission"
checks = ("morning_flatpage_check",)

def morning_flatpage_check(self, flatpage):
hour = int(datetime.datetime.now().strftime("%H"))
if hour >= 8 and hour <= 12 and flatpage.url == "/about/":
return True
return False

authority.register(Flatpage, FlatpagePermission)

Uso:

def my_view(request):
check = FlatPagePermission(request.user)
flatpage_object = Flatpage.objects.get(url="/homepage/")
if check.morning_flatpage_check(flatpage=flatpage_object):
print "Yay, you can change *this* flatpage!"

Ele também envolve permissões django padrão, mas você pode ver a flexibilidade na permissão personalizada acima que -AFAIK- você não pode fazer no guardian.

Caso de uso comum

Um aluno pode pertencer às salas de aula.

guardião:

  1. Quando o aluno for designado para a nova sala de aula, anexe a permissão "attend_classroom" ao objeto Aluno sobre Sala de aula.
  2. Quando o aluno for removido da sala de aula, remova "attend_classroom" permissão para o objeto Student over Classroom.
  3. Ao acessar o Classroom, verifique "attend_classroom" permissão.

autoridade:

  1. Definir permissão personalizada ClassroomPermission.can_attend_classroom(), que consultará se o aluno pertence à sala de aula.
  2. Ao acessar o Classroom, verifique ClassroomPermission.can_attend_classroom()

A autoridade mantém a lógica de verificação em um arquivo separado. O Guardian precisa anexar / desanexar permissões no restante do código.