Una forma conveniente para que Django agregue los mismos permisos a todos los modelos

La biblioteca contrib.auth que viene con Django tiene potentes funciones de administración.Crea 3 permisos predeterminados para cada módulo: agregar, cambiar y eliminar. Sin embargo, a veces queremos agregar los mismos permisos (como leer) a todos los modelos, ¿qué debemos hacer?

Si agrega permisos a la clase Meta de cada modelo, debe modificar todos los modelos para agregar la misma línea, y el método está demasiado sucio.

Un atajo es modificar una línea de Django.contrib.auth. La ruta del archivo es django \ contrib \ auth \ management \ __ init__.py, el fragmento de código es el siguiente:

def _get_all_permissions(opts):
    "Returns (codename, name) for all permissions in the given opts."
    perms = []
    for action in ('add', 'change', 'delete'):
        perms.append((_get_permission_codename(action, opts), u'Can %s %s' % (action, opts.verbose_name_raw)))
    return perms + list(opts.permissions)

Simplemente agregue los permisos correspondientes en esta línea, como:

    para la acción en ('agregar', 'cambiar', 'eliminar'):

Cambiar a:

    para la acción en ('leer', 'agregar', 'cambiar', 'eliminar'):

Luego ejecute python manage.py syncdb, puede ver que el permiso de lectura de todos los modelos se ha agregado después de la tabla auth_permission. ¿Es muy conveniente?


Para agregar permisos personalizados para un modelo, consulte el documento oficial: https://docs.djangoproject.com/en/1.4/topics/auth/#custom-permissions

Supongo que te gusta

Origin blog.csdn.net/huzhenwei/article/details/8224753
Recomendado
Clasificación