Django - Admin Interfaces - позволяет создавать пользователей для не-суперпользователя - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть ситуация, когда разрешается доступ к интерфейсам администратора для трех типов пользователей: - Администратор - Супервизор - Агент

Это иерархическая ситуация, администратор один (суперпользователь) и создает супервизоров, а супервизоры создают агентов.

Все они могут войти в систему администратора django с разными полномочиями.

Вход в систему управляется django.contrib.auth с моделью по умолчанию auth_user (.

     from django.contrib.auth.models import User

class Supervisor(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    e_mail = models.EmailField(max_length=60, db_column='E-Mail',blank=True)
   ...other fields....


class Admin(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    e_mail = models.EmailField(max_length=60, db_column='E-Mail',blank=True)
     ...other fields...

Но есть проблема. Если я разрешаю супервизору создать агента, это означает, что я должен добавить авторизацию в ADD и ИЗМЕНИТЬ таблицу USER. И это опасно, любые супервизоры могут статьсуперпользователь, удаление пользователей и т. д. и т. д. *

Как я могу решить эту проблему? Можно ли разрешить супервизору создавать агента, без которого он может быть опасным ??

Спасибо


РЕДАКТИРОВАТЬ

У меня есть сомнения ... в models.py во время определения класса я написал этот метод:

def save(self):
    self.user.is_staff = True
    self.user.save()
    super(Agent, self).save()

IЯва, метод EJB это был транзакционный / атомарный (фиксация автоматическая) ... В django я должен вызвать метод save ().

Это вопрос, отличный от предыдущего .....

1 Ответ

0 голосов
/ 20 сентября 2018

Не знаю, смогу ли я понять вашу проблему.Но, если бы я это сделал, вы могли бы редактировать форму создания пользователя.

@admin.register(User)
class UserAdmin(BaseUserAdmin):
    view_on_site = False
    list_display = ('username', 'first_name', 'last_name', 'is_active', 'is_staff', 'date_joined', 'last_login')
    list_filter = ('is_staff', )
    fieldsets = (
        ('Data', {'fields': ('username', 'email', 'first_name', 'last_name', 'password')}),
        ('Activation/Deactivation', {'fields': ('is_active', )}),
        ('Permissions', {'fields': ('is_staff', 'groups', )})
)

Поскольку superuser больше не вариант, ваши супервизоры не могут стать суперпользователями.

Дайте мне знатьесли это поможетМожет быть, мы сможем приблизиться к решению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...