gpt4 book ai didi

django - 可以在 django 中使用装饰器来根据 View 参数执行权限吗?

转载 作者:行者123 更新时间:2023-12-04 14:59:14 24 4
gpt4 key购买 nike

我不确定这是否可能,但有没有办法写出类似的东西

@group_required('group_id')
def myview(request, group_id):
.....

我在哪里查看参数 group_id 的值并将此 View 的访问权限限制为仅此组中的人员?

我知道可以创建一个装饰器来检查某个特定组的成员资格
@group_required('admin')
def myview(request):
....

但是说我想要一个只有特定组中的人才能访问的 View ,这由 url 决定。

所以例如
/group/1
/group/2

每个人都应该拥有权限,以便只有 #X 组的成员才能看到该页面。我可以轻松地在 View 中编写此功能
group = get group
if user not in group
raise 404

但这种逻辑一直在重复。装饰器似乎是一种很有前途的方法,但它的范围似乎倒退了。是否有另一种首选方式来处理此类权限?

谢谢!

最佳答案

装饰器可以访问所有 View 参数,所以这绝对是可能的。你可以这样做:

def group_required(arg_name):
def decorator(view):
def wrapper(request, *args, **kwargs):
group_id = kwargs.get(arg_name)
user = request.user
if group_id in user.groups.values_list('id', flat=True):
return view(request, *args, **kwargs)
else:
return HttpResponseForbidden # 403 Forbidden is better than 404
return wrapper
return decorator

(如果你不需要在装饰器中动态定义参数的灵活性,例如,如果你总是调用它 group_id ,你可以在这里错过外部函数而只需使用 kwargs.get('group_id') 。)

关于django - 可以在 django 中使用装饰器来根据 View 参数执行权限吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20901606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com