пользовательские роли и разрешения - PullRequest
0 голосов
/ 17 декабря 2018

Я новичок в django и drf, поэтому я думаю, что это то место, где мне могут помочь.

Я строю систему посещаемости офиса.

Теперь здесь пользователи: 1. Операционный менеджер (ОМ) 2. Администратор 3. Персонал 4. Генеральный директор.OM может создать нового пользователя и назначить его администратором, персоналом или генеральным директором.Администратор, персонал и генеральный директор имеют свои собственные разрешения.

Мои вопросы - как назначить эти роли и разрешения для типов пользователей в django rest framework.Я видел документацию по пользовательскому разрешению drf, в которой говорится о расширении класса BasePermission и реализации 2 методов.

Мое требование: новый пользователь не регистрируется самостоятельно, но OM создает для него нового пользователя.

Редактировать 1:

Я реализовал этот способ.Будет ли это работать?

модель:

class User(AbstractUser):
    user_type = {
    ('admin', 'Admin'),
    ('staff', 'Staff'),
    ('om', 'OM'),
    }
    user_choice = CharField(choices=user_type, blank=True, max_length=255)

сериализатор:

class UserSerializers(serializers.ModelSerializer):
first_name = serializers.ReadOnlyField()
groups = GroupSerializers(many=True)
user_type = serializers.CharField()
class Meta:
    model = User
    fields = ('first_name', 'last_name','address','contact', 'email', 'date_of_birth', 'branch', 'groups', 'user_type')

def user_group(self, data):
    user_type = data.get("user_type", "")
    email = data.get("email")
    user = User.objects.get(email = 'email')# get user object from post request
    if user_type == "admin":
        grp = Group.objects.get_or_create(name='Admin')
        user.group.add(grp)

    elif user_type == "staff":
        grp = Group.objects.get_or_create(name='Staff')
        user.group.add(grp)

    else:
        grp = Group.objects.get_or_create(name='OM')
        user.group.add(grp)

просмотр:

class UserCreateView(ModelViewSet):
model = User
serializer_class = UserSerializers

1 Ответ

0 голосов
/ 17 декабря 2018

Прежде всего вы должны решить, какое приложение контроля доступа вы хотите использовать.Здесь вы можете провести хорошее сравнение: https://www.vinta.com.br/blog/2016/controlling-access-a-django-permission-apps-comparison/

Для меня достаточно использовать разрешения Native Django с группами, назначенными пользователям, и @permission_required decorator.

...