Как создать таблицу разрешений, независимую от разрешений пользователей в Django? - PullRequest
0 голосов
/ 11 июня 2011

Я хочу создать таблицу разрешений, которая использует django-users и другую таблицу в качестве внешнего ключа. И тогда дает разрешения на это. Что там должно быть в models.py?

Сомнение можно поставить как два отдельных вопроса:

  1. Как использовать django-users (user id) в качестве внешнего ключа в другом приложении под названием разрешения.
  2. Как использовать идентификатор таблицы, генерируемый django, когда syncdb сделано как первичный ключ

эта таблица (другое приложение), которая будет использоваться как внешний ключ разрешений этого приложения.

Ответы [ 3 ]

1 голос
/ 11 июня 2011

Есть ли причина, по которой вы не можете использовать функции разрешений в django.contrib.auth? Используя функцию permissions объекта Meta и таблицу Groups, вы можете легко создать матрицу "пользователи в группе X могут выполнять действие Y".

Чем больше я думаю об этом, тем больше кажется, что ваша реализация будет отражать функцию групп / разрешений без дополнительных преимуществ.

Подробнее см. https://docs.djangoproject.com/en/1.3/topics/auth/.

0 голосов
/ 11 июня 2011

Для модели вы хотите посмотреть на приложение ContentTypes в .contrib. (https://docs.djangoproject.com/en/1.3/ref/contrib/contenttypes/) и вы можете просто создать внешний ключ для пользователя.

from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType

class Permission(models.Model):
    user = models.ForeignKey(User)
    table = models.ForeignKey(ContentType)
    ### the rest of the model.

Тогда, по вашему мнению, или что-то еще:

perm = Permission()
perm.user = request.user
perm.table = ContentType.objects.get_for_model(TableToAddPermissionFor)
perm.save()
0 голосов
/ 11 июня 2011

Лучше всего создать профиль пользователя - модель, которая может быть связана с моделью пользователя, где модель профиля содержит любые ключи, которые вы хотите. Затем вы можете вызвать User.get_profile () и получить объект модели, проверить, какие ключи у него есть.

...