rest - 如何使用不同的端点集动态创建权限组 Django Rest Framework

标签 rest design-patterns django-rest-framework architecture django-permissions

在我的项目中,我有很多端点 View (APIViews、ViewSets)。现在我为所有这些设置了权限,其中一些是默认的(例如AllowAny),一些是自定义创建的:

permission_classes = (IsUserHaveSomePermission,)

现在我想实现一些灵活的系统,这将允许我为每个用户指定一组允许的端点,例如:

在前端,我想选择一些用户,并有一个与项目端点相对应的复选框列表。

enter image description here

这只是一个乌托邦解决方案,一些细节可能会改变,但主要问题是如何制作类似的东西,以便管理员基本上可以动态更改用户允许的端点/ View 列表? 提前致谢

最佳答案

该方案可以通过存储用户是否有权限访问当前的请求方法和请求路径来实现。

创建一个新的数据库模型来存储用户、请求方法和请求路径。假设模型的名称是 RequestPermission

您可以存储表示 url 的常量来代替路径,以便稍后可以灵活地编辑路径。该常数可以是 url name这是 django 支持的。

class RequestPermission(models.Model):
    user = user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='request_permissions')
    method = models.CharField(max_length=10)
    path_name = models.CharField(max_length=200)

创建自定义权限类:

class IsUserResuestAllowed(permissions.BasePermission):

    def has_permission(self, request, view):
        user = request.user
        # you can choose how to get the path_name from the path
        path_name = get_path_name(request.path)
        return RequestPermission.objects.filter(user=user, method=request.method, path_name=path_name).exists()

现在您可以使用此类作为其余框架设置中的默认权限类,或在每个 View 中使用它。

关于rest - 如何使用不同的端点集动态创建权限组 Django Rest Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66116931/

相关文章:

design-patterns - 使用 db4o 报告

使用请求库的 Django Rest Framework 测试功能

python - 导入错误 : No module named django_extensions

python - Django REST Updateview 与 PUT POST

android - 使用 REST Api 的移动应用程序开发计划是个好主意吗?

java - 我从 SOAP 服务返回什么以及如何返回?

java - 在 Java 运行时选择要扩展的子类

java - hibernate pojo 过度暴露

Rest Web动态项目中的java.lang.NoClassDefFoundError

java - Spring Data Rest FetchType