自定义角色和权限

时间:2018-12-17 07:17:45

标签: django django-rest-framework

我是django和drf的新手,所以这是我认为可以为您提供帮助的地方。

我正在建立办公室出勤系统。

现在,这里的用户是1.操作经理(OM)2.管理员3.人员4. CEO。 OM可以创建一个新用户并分配它是admin还是staff还是CEO。管理员,员工和首席执行官拥有自己的权限。

我的问题是如何在django rest框架中将这些角色和权限分配给用户类型。 我看过有关自定义权限的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 :(得分:0)

首先,您应该确定要使用的访问控制应用程序。在这里您可以进行很好的比较:https://www.vinta.com.br/blog/2016/controlling-access-a-django-permission-apps-comparison/

对于我来说,使用本机Django权限以及分配给用户的组和@permission_required装饰器就足够了。