【问题标题】:How to Create custom permission classes?如何创建自定义权限类?
【发布时间】:2021-01-12 11:37:51
【问题描述】:

型号:

class DoctorProfile(AbstractBaseUser, PermissionsMixin):
    id=models.AutoField(primary_key=True)
    name = models.CharField(_('name'), max_length=50, blank=True)
    mobile = models.CharField(_('mobile'), unique=True, max_length=10, blank=False)
    # mobile=  models.CharField(primary_key=True , max_length=10, validators=[RegexValidator(r'^\d{1,10}$')])
    # mobile= models.IntegerField(validators=[MinValueValidator(10),MaxValueValidator(10)])
    email = models.EmailField(_('email address'), blank=True)
    password = models.CharField(_('password'),max_length=25,blank=False)
    date_joined = models.DateTimeField(_('date joined'), auto_now_add=True)
    is_verified=models.BooleanField(default=False)
    is_active = models.BooleanField(_('active'), default=False)
    is_doctor = models.BooleanField(_('active'), default=False)
    otp = models.IntegerField(null=True, blank=True)
    dob=models.DateField()
    GENDER_CHOICES = (
    ('M', 'Male'),
    ('F', 'Female'),
  )
   gender = models.CharField(max_length=1, choices=GENDER_CHOICES)

如何为创建任务创建自定义权限? 例如:

class ClinicRegistrationView(generics.ListCreateAPIView):
     serializer_class = ClinicSerializer
     queryset = Doctor_clinic.objects.all()
     permission_classes = (permissions.IsAuthenticated,)#token user can create

如何给is_doctor权限,只创建任务??

【问题讨论】:

    标签: django django-models django-rest-framework django-views django-forms


    【解决方案1】:
    from rest_framework.permissions import BasePermission
    
    
    class IsDoctorPermission(BasePermission):
        """
        Check if user is a doctor.
        """
    
        message = "The user is not a doctor."
    
        def has_permission(self, request, view):
            return request.user.is_doctor
    

    并将此权限添加到视图

    class ClinicRegistrationView(generics.ListCreateAPIView):
         serializer_class = ClinicSerializer
         queryset = Doctor_clinic.objects.all()
         permission_classes = (permissions.IsAuthenticated, IsDoctorPermission)
    

    【讨论】:

    • 工作,这个类(IsDoctorPermission)是否支持所有的crud操作?
    • @Prashanth 是的,您可以将其应用于所有请求方法。
    • 登录患者也获得此令牌并执行操作
    • @Prashanth 你能详细描述一下这个问题吗?
    • 我定义了两个模型一个是医生另一个是病人模块登录后这两个用户获得了 on 令牌并执行操作,所以问题是医生添加(创建)医院详细信息所以在登录后也允许创建例如(患者还获得创建此类的令牌用户的令牌)此函数接受每个令牌人进行创建,但我只需要创建“is_doctor”,is_doctor 权限在激活医生后以及当我激活 is_doctor 时都有效, 自动患者令牌也接受此权限....
    【解决方案2】:

    你可以这样做

    class ClinicRegistrationView(generics.ListCreateAPIView):
         serializer_class = ClinicSerializer
         queryset = Doctor_clinic.objects.all()
    
         
         def get_permissions(self):
             if self.action == "create":
                permission_classes = [permissions.AllowAny,]
             else:
                permission_classes = [permissions.IsAuthenticated,]
             return [permission() for permission in permission_classes]
    

    【讨论】:

    • 不工作,没有显示任何操作方法。
    猜你喜欢
    • 2019-01-24
    • 2019-10-09
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 2022-08-03
    • 2021-10-27
    • 2016-04-20
    相关资源
    最近更新 更多