将用户限制为单个应用程序

时间:2012-04-07 23:10:30

标签: django permissions

我有一个包含多个应用程序的Django项目。我想限制特定用户只能访问一个特定应用并在用户创建时,即无需使用views.py等装饰器修改@permission_required的每个方法。

这可能吗?也就是说,是否可以声明用户'A'只能使用应用'X'而无需修改任何应用'Y代码?

1 个答案:

答案 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}})......但这就是我做的方式。