在我的项目中,我有很多端点 View (APIViews、ViewSets)。现在我为所有这些设置了权限,其中一些是默认的(例如AllowAny),一些是自定义创建的:
permission_classes = (IsUserHaveSomePermission,)
现在我想实现一些灵活的系统,这将允许我为每个用户指定一组允许的端点,例如:
在前端,我想选择一些用户,并有一个与项目端点相对应的复选框列表。
这只是一个乌托邦解决方案,一些细节可能会改变,但主要问题是如何制作类似的东西,以便管理员基本上可以动态更改用户允许的端点/ 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/