我要添加一些自定义授权,以验证登录的用户是否有权访问我的应用程序的特定部分。它不是很漂亮,但是可以工作:
view_permissions = {
'admin_list': {
'school':{'userrole':['S','A'], 'usertype':[]},
'class':{'userrole':['S','A'], 'usertype':[]},
' ... '
},
'delete_object': { ... },
'edit_object': { ... },
}
}
def check_permissions(request, viewname, objecttype):
if(request.user.userrole in view_permissions[viewname][objecttype]['userrole'] or
request.user.usertype in view_permissions[viewname][objecttype]['usertype']
):
return True
else:
return False
def delete_object(request, objecttype, objectid):
# Redirect to home page if not authorized
if(not check_permissions(request, 'delete_object', objecttype)):
return redirect('wakemeup:index')
# Otherwise, continue processing
myobject.delete()
...
return admin_list(request, objecttype)
我想要做的是将其移动redirect到check_permissions函数内部,如下所示:
def check_permissions(request, viewname, objecttype):
if( <check permissions are valid> ):
pass # Authorized: Do nothing and continue with caller view logic
else:
return redirect('wakemeup:index') # Unauthorized: redirect to home
def delete_object(request, objecttype, objectid):
# Redirect to home page if not authorized
check_permissions(request, 'delete_object', objecttype))
问题在于,check_permissions函数内部的重定向不执行任何操作。仅当我return在调用逻辑中添加时,它才会重定向:
def delete_object(request, objecttype, objectid):
# Redirect to home page if not authorized
return check_permissions(request, 'delete_object', objecttype))
我猜想它与嵌套函数调用有关,它会将其输出一直返回到原始调用者。但是,有没有一种简单的方法可以使重定向从check_permissions函数中正常工作?
慕妹3242003
相关分类