Pregunta django-object-permissions Vs django-guardian Vs django-authority


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.?


32
2018-06-18 12:10


origen


Respuestas:


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.


24
2018-06-18 12:28



En cuanto a Aug '13, django-object-permisos ha sido reemplazado por django-permiso. 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 permisos base de datos para mantener los permisos (adjuntos a la creación del objeto, f.e.).

- 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 Estudiante sobre el salón de clases.
  2. Cuando el alumno es removido de Classroom, eliminar 'attend_classroom' permiso para el objeto Estudiante por encima del salón de clase.
  3. Al acceder a Classroom, verifique 'attend_classroom' permiso.

autoridad:

  1. Definir permiso personalizado ClassroomPermission.can_attend_classroom(), que consultará si el Estudiante pertenece a Classroom.
  2. Al acceder a Classroom, verifique 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.


17
2017-08-19 05:18