背景にジャンゴにユーザーに
を単一のセッション余分な許可を与える方法そのユーザーの代わりに彼らはマイクであるかのようにIeは、我々はその後、ジョーが組織にログインすることができます私たちは、Djangoのスーパー管理者がログインして、特定の組織内のすべてのユーザーを表示することができますサービスを持っており、このスーパー管理者は、「ログイン」することができます
super admin = joe
users = mike, abe, tony
があると、マイク、阿部とトニーを参照してください、そしてジョーは、システムにログインすることができます。あたかもMikeがそれをやっているかのように、彼らが見てやることはすべてです。スーパー管理者が公開イベントを作成する権限を持っていても、マイクはそうでない場合、スーパー管理者がマイクとしてログインすると、イベントを作成することもできなくなります。
これまでのところとても良いです。
しかし、私たちは多くの場合、スーパー管理者がマイクとしてログインし、システム内のスーパー管理者として認識されることを望んでいます。これは、データの移行のために便利です。つまり、スーパー管理者がmikeが自分でできないマイクの名前で実際に処理する必要があることがあります。
問題は
ここでの考え方は、私はスーパー管理者がマイクとしてログインしていることを認識するようにシステムを好むだろうということです。しかし、私がオンラインで見たすべての質問(例:this one)は、一時的/一時的なアクセス権ではなく、永続的なアクセス権の割り当て(つまり、dbへの格納)に関するものです。
これはマイクの横にあるログインボタン上の管理をクリック呼び出されるコードです:
class LoginAsView(APIView):
permission_classes = []
def get(self, request, *args, **kwargs):
if request.user.is_superuser and 'username' in request.GET:
user = User.objects.get(email=request.GET['username'])
user.backend = settings.AUTHENTICATION_BACKENDS[0]
login(self.request, user)
return Response('/', 302, headers={'Location': '/'})
raise PermissionDenied('NO U')
ので、あなたは、私がまさにそのユーザかのように振る舞うを取得していたユーザ(すなわちマイク)を見ることができるように有機的にログインしています。この方法では、mikeに一時的な特別な権限を割り当てて、マイクが通常は行えないことを許可したいと思います。
をハイジャックされ、私はこの勧告を得た..しかし、それはそれ自身で行き止まりのように思える:「あなたが保存することができますセッション内のフラグを設定し、User.has_permissionなどを修正してセッションを確認してください。しかし、これらの機能は要求にアクセスできないため、難しいです。 – abbood