【问题标题】:Specific User permissions in DjangoDjango 中的特定用户权限
【发布时间】:2022-11-30 19:25:22
【问题描述】:

我只需要做天长人力资源部批准休假权限。如何在 Django Rest 框架中实现它?因为我是新手,所以我发现这种情况具有挑战性。帮我解决技术问题

这是我的用户模型

class User(AbstractBaseUser):
    email = models.EmailField(max_length=255, unique=True)
    username = models.CharField(max_length=150, unique=True)
    name = models.CharField(max_length=150, blank=True)
    is_admin = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_HR = models.BooleanField(default=False)
    is_TL = models.BooleanField(default=False)
    updated_at = models.DateTimeField(auto_now=True)
    created_at = models.DateTimeField(auto_now_add=True)

这是我的请假申请模型。

class Leave(models.Model):
    leave_type = models.CharField(max_length=50)
    employee = models.ForeignKey(UserDetails, on_delete=models.CASCADE)
    manager = models.CharField(max_length=50)
    applied_on = DateTimeField(auto_now_add=True)
    from_date = DateField()
    to_date = DateField()
    number_of_days = IntegerField()
    purpose = models.CharField(max_length=100)
    status = models.CharField(max_length=50, choices=( ('Pending', 'Pending'),
                                                      ('Approved', 'Approved'),
                                                      ('Rejected', 'Rejected')
        
    ),default='Pending')
    waiting_approval = models.BooleanField(default=True)
    TL_approved = models.BooleanField(default=False)
    TL_rejected = models.BooleanField(default=False)
    
    def approve(self):
        self.manager_approved = not self.manager_approved
        self.manager_rejected = not self.manager_rejected

这是我的看法

class LeaveManagerApproveView(APIView):
    def post(self, request):
        leave_id = request.data.get('leave_id')
        leave = Leave.objects.get(id=leave_id)

        leave.waiting_approval = False
        leave.manager_approved = True
        leave.status = 'Approved'
        leave.save()
        return Response({'successMessage': 'Leave Approved Successfully'})

在我看来,我只需要Hr或TL应该批准还是拒绝?如何摇滚?

【问题讨论】:

  • 我尝试了不同的权限但都失败了,无法帮助自己了解如何专门创建 hr 和 tl 权限?

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


【解决方案1】:

我对此没有太多经验,但对我来说,你可以向你想要限制的 APIView 添加一个权限类,如下所示:

class LeaveManagerApproveView(APIView):
    permission_classes = [LeaveManagerApprovePermission]

    def post(self, request):
        ...

像这样使用您自己的自定义权限:

from rest_framework import permissions


class LeaveManagerApprovePermission(permissions.BasePermission):
    message = 'Approving Leave-Manager not allowed.'

    def has_permission(self, request, view):
        return request.user.is_HR or request.user.is_TL

我从 documentation 那里得到了例子,并对它们进行了一些修改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 2014-01-10
    相关资源
    最近更新 更多