如何使用自定义权限和APIView实现基于许可证的用户访问?

How to implement a user access based on licenses using custom permissions and APIView?

我有以下型号。

class Post(models.Model):
    content = models.TextField()

class User(AbstractUser):
    pen_name = models.Charfield()    

我想限制用户创建特定数量的帖子(比如说 10 个)并且不能超过这个数量。另外,我希望权限在特定日期前过期。

这些模型具有代表性,我原来的模型有更多的字段,需要更多的权限。但对于所有这些,我基本上都需要限制数量和有效期。我想通过使用权限来获得许可功能。因此,用户可以购买许可证在一年内发布 'n' 个帖子。

对于 APIViews 和 DRF 中的 permission_classes,我该如何实现?

您可以为您的自定义添加一个字段(post_number) User,这个字段可以是 IntegerFieldPositiveIntegerField,您可以将其设为 limited.

How to create an expiration date in my django model?

class User(AbstractBaseUser, PermissionsMixin):
    post_number = models.IntegerField()
    expiration_date = models.DateTimeField()

    more_restrictions = models.ManyToManyField(MyRestrictionModel)

    # rest of your code...

有关更多限制,您可以与 MyRestrictionModel 建立关系,每当您向 MyRestrictionModel 添加字段时,您的 User 将受到限制。

对于许可证,您可以创建许可证模型

class License(models.Model):
    code = models.Charfield()
    count = models.Integerfield()
    #other fields for license information

然后您可以将 ManyToManyField 中的许可证授予用户模型

class User(models.Model):
    ...
    licenses = models.ManyToManyField(License)
    ...

您还可以为 M2M 关系添加直通模型,以存储其他详细信息,例如许可证购买日期、到期日期、交易记录等。

然后在APIViews中可以使用DRF的自定义权限class

class MyPermissionClass(permissions.BasePermission):
    def has_permission(self, request, view):
        #process user's licenses to check permissions
class MyView(APIView):
    permission_classes = [MyPermissionClass,]