我有一个包含多个应用程序的 Django 项目。我想在用户创建时限制特定用户只能访问一个特定的应用程序,即不必说views.py
使用诸如@permission_required
.
这可能吗?也就是说,是否可以声明用户“A”只能使用应用程序“X”而不修改任何应用程序“Y”的代码?
我有一个包含多个应用程序的 Django 项目。我想在用户创建时限制特定用户只能访问一个特定的应用程序,即不必说views.py
使用诸如@permission_required
.
这可能吗?也就是说,是否可以声明用户“A”只能使用应用程序“X”而不修改任何应用程序“Y”的代码?
您可以编写一些实现该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 内置视图的应用程序(例如,direct_to_template
)......但这是我会这样做的方式。