12

Django 1.5 アプリでユーザーのアクセス許可を割り当てました。すべてのユーザー権限をリストすると

In [1]: user.get_all_permissions()
Out[1]: set([u'profile.change_profile'])

1 つのアクセス許可が表示されます (これは正しく、必要なものです)。ユーザーはスーパーユーザーでも管理者でもありません。

In [2]: user.is_superuser
Out[2]: False

ただし、を使用しようとすると、送信された許可要求に対してuser.has_perm常に返されます。True

In [3]: user.has_perm('random_permission')
Out[3]: True

ユーザーがスーパーユーザー/管理者である場合に期待する動作。非スーパーユーザーがTrueすべてのリクエストに対して常に取得するのはなぜですか? 設定を見逃していませんか?

4

1 に答える 1

6

Thane Brimhall のコメントで述べたように、認証バックエンドを確認する必要があります。django sourcesの User モデルの has_perm メソッドに関するこのコメントを見つけることができます。

ユーザーが指定された権限を持っている場合は True を返します。このメソッドは、利用可能なすべての認証バックエンドを照会しますが、いずれかのバックエンドが True を返す場合はすぐに戻ります。したがって、単一の認証バックエンドから許可を持つユーザーは、一般に許可を持っていると見なされます。

また、ユーザー グループを確認することも忘れないでください。デフォルトのバックエンドはユーザー グループの権限をチェックするため、接続されている可能性があります。

于 2013-12-16T13:05:39.543 に答える