2017-01-12 4 views
3

Я прочитал в документации Django, что при добавлении пользователя в группу он автоматически получит разрешения, предоставленные этой группе. Итак, в моем приложении я создал группу под названием «admin» через интерфейс администратора, и я дал разрешение, которое мне было нужно. Теперь, если я создаю нового пользователя и добавлю его к «владельцам» группы, у него нет разрешений группы.Назначение разрешений группы пользователю в django

Тогда я попытался экспериментировать это в Джанго оболочки и он побежал хорошо права доступа группы действительно присвоенного user_permissions


Это мой код в Джанго модели пользователя

class UserAccount(AbstractUser): 

def __str__(self): # __unicode__ for Python 2 
    return str(self.username) 

def __unicode__(self): 
    return str(self.username) 

def save(self, *args, **kwargs): 
    super(UserAccount, self).save(*args, **kwargs) 
    for group in set(self.groups.all()): 
     self.user_permissions = group.permissions.all() 

Другой Попробуйте

class UserAccount(AbstractUser): 

def __str__(self): # __unicode__ for Python 2 
    return str(self.username) 

def __unicode__(self): 
    return str(self.username) 

def save(self, *args, **kwargs): 
    super(UserAccount, self).save(*args, **kwargs) 
    for group in set(self.groups.all()): 
     for perm in group.permissions.all(): 
      self.user_permissions.add(perm) 

Оба не работают, когда я сохраняю пользователя с интерфейса панели администратора, но оба хорошо работают на оболочке django. Я попытался отладки ipdb и код выполняется, но разрешения не назначены

Затем я пытаюсь добавить разрешения в обратном пути из группы

from django.contrib.auth.models import Group as BaseGroup 
class Group(BaseGroup): 
    class Meta: 
     proxy = True 

    def save(self): 
     super(Group, self).save() 
     for user in self.user_set.all(): 
      user.user_permissions = self.permissions.all() 

Я не знаю, что я сделал правильно или нет, и если это правильно почему бы не работать должным образом.

Update:

Нет необходимости назначать права доступа, как пользователь имеет права доступа группы автоматически

ответ

1

Это, вероятно, не будет работать, потому что разрешения пользователя также сохраняются на странице администратора.

происходит следующее:

  1. Ваш объект пользователя сохраняется

  2. Вы устанавливаете разрешения в его методе сохранения()

  3. Тогда разрешений, как установленные на странице сохраняются, переписывая все, что вы сделали в save()

Последнее тоже не сработало, потому что назначение user.user_permissions означает, что вы перезаписываете связанное свойство менеджера, но кроме этого ничего не делает.

BUT - вы должны просто предоставить пользователю группу вручную в интерфейсе администратора, и это должно заставить пользователя иметь все права, назначенные группе.

Я отмечаю, что вы говорите, что дали разрешения группе с именем «admins», а затем сделали пользователь частью «владельцев», но я надеюсь, что это просто опечатка.

+0

Я уже даю группе пользователю и группе разрешения –

+0

Спасибо, так как у пользователя есть разрешения группы. Я проверил его метод 'has_perm' –

Смежные вопросы