我有一个包含多个应用程序的Django项目。我想限制特定用户只能访问一个特定应用并在用户创建时,即无需使用views.py
等装饰器修改@permission_required
的每个方法。
这可能吗?也就是说,是否可以声明用户'A'只能使用应用'X'而无需修改任何应用'Y代码?
答案 0 :(得分:2)
您可以编写一些实现process_view
方法的中间件,然后检查视图函数属于哪个应用程序。
例如,这是一种(可能是错误的)方式:
class RestrictAppMiddleware(object):
def process_view(self, request, view_func, *args, **kwargs):
view_module = view_func.__module__
allowed_apps = apps_visible_to_user(request.user)
if not any(app_name in view_module for app_name in allowed_apps):
return HttpResponse("Not authorized", status=403)
显然你需要改进启发式(例如,这个允许用户也可以访问“foo”视图“foobar”)并考虑依赖于Django内置视图的应用程序(例如,{{ 1}})......但这就是我做的方式。