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