with vincent template page custom django django-authentication django-apps django-permissions

vincent - login url django



django-object-permissions Vs django-guardian Vs django-authority (2)

Comenzaré diciendo que no usamos ninguno de estos para el permiso de nivel de objeto: usamos nuestro propio método personalizado y realmente me gustaría no haberlo hecho. Si puede evitar los permisos de nivel de objeto, hágalo, son un dolor para organizar.

Así es como evalúo las 3 aplicaciones que has mencionado.

Desarrollo activo:

  1. django-guardian (hace 1 semana)
  2. django-object-permissions (hace 1 año)
  3. django-authority (hace casi 2 años)

API

  1. django-guardian (guarde una instancia de un modelo definido)
  2. django-object-permisos (permisos de registro)
  3. django-authority (definir clases)

Lo anterior está en orden por cierto.

Recomendaría tu guardián solo con API, pero el hecho de que todavía se esté desarrollando donde los demás no son usualmente significa una gran victoria.

He encontrado 3 soluciones de permiso de fila para Django 1.2+

¿Alguien podría decir si hay alguna recomendación más que las otras, cuáles son sus principales diferencias, etc.?


En cuanto a Aug ''13, django-object-permissions ha sido reemplazado por django-permission . Los 3 proyectos están en desarrollo activo.

Personalmente, prefiero la autoridad o el permiso, que utiliza métodos para verificar permisos (tiempo de ejecución), en lugar de django-guardian, que usa la base de datos para guardar los permisos (adjuntada a la creación del objeto, fe).

- EDITAR -

Ejemplos de los documentos.

django-guardian

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

Usted asigna el permiso y lo mantiene en la base de datos.

django-authority

Declaración:

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!"

También ajusta los permisos de django estándar, pero puede ver la flexibilidad en el permiso personalizado anterior que -FAIK- no puede hacer en guardián.

Uso común

Un estudiante puede pertenecer a Classroom (s).

guardián :

  1. Cuando el alumno es asignado a un nuevo aula, adjunte el permiso ''attend_classroom'' al objeto del alumno sobre el aula.
  2. Cuando el alumno es removido del salón de clases, quite ''attend_classroom'' permiso ''attend_classroom'' al objeto de Estudiante sobre el salón de clase.
  3. Al acceder a Classroom, ''attend_classroom'' permiso ''attend_classroom'' .

autoridad :

  1. Defina el permiso personalizado ClassroomPermission.can_attend_classroom() , que consultará si el alumno pertenece a Classroom.
  2. Al acceder a Classroom, ver ClassroomPermission.can_attend_classroom()

La autoridad mantiene la lógica de verificación en un archivo separado. Guardian necesita adjuntar / separar permisos a través del resto del código.