我是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
答案 0 :(得分:0)
首先,您应该确定要使用的访问控制应用程序。在这里您可以进行很好的比较:https://www.vinta.com.br/blog/2016/controlling-access-a-django-permission-apps-comparison/
对于我来说,使用本机Django权限以及分配给用户的组和@permission_required装饰器就足够了。