2016-11-25 13 views
0

ユーザーを登録し、リソースレベルの権限に基づいてリソースを与えるdjangoアプリケーションを開発しました。これは私のモデルとテンプレートに基本レベルのアクセス許可を使用しています。許可私のモデルに許可タプルを設定しました:要求ユーザー属性を使用して非管理者ユーザーのユーザー権限を取得する方法

class Model(AbstractUser): 
    group = models.ForeignKey(AppGroup) 
    class Meta: 
     permissions = (('view_app', 'user can view app'),) 

と私は上記のようなモデルを作成した後に私のモデルを移行します。

権限のために、adminからグループを作成し、そのグループを使用してフォームクラスでドロップダウンを生成したすべてのアプリケーションの表示/変更/削除の権限を含めました。ユーザー(admin)は、選択された権限に基づいて他のユーザーを作成することができます。新規ユーザーは正常にログインしてすべてのリソースにアクセスできますが、

などの多対多の関係のユーザーアクセス権にアクセスしようとすると、
class UserListView(ListView): 
    def get_queryset(self): 
     print(self.request.user.user_permissions.all()) 
     return super(UserListView, self).get_queryset() 

私は私の見解を一覧表示するとき、それは私に関係のエラー(500エラー)を与える:リレーションviews_list_user_permission今すぐ

存在しない、私はスーパーで同じビューにアクセスした場合、それは私にすべての権限を与え enter image description here が、スーパーユーザーでもスタッフでもないユーザーからは、上記のエラーが吐き出されます。 djancgo.contrib.auth.models PermissionMixinクラスコードを見てみると、user_permissions m2mフィールドはスーパーユーザーだけがアクセスできますが、私はそれを疑っています。これは私がやっていることであり、問​​題を抱えています。間違った方法でこれを訂正してください。

答えて

1

スーパーユーザーにはすべての権限が与えられています。したがって、すべての権限を見ることができます。しかし、新しいユーザーが作成されると、彼はアクセス許可が設定されていないので、ユーザーと権限の間には関係がないので、上記のエラーが発生します。

Note:- 
あなたが特定のアプリのために

{{ perms }} 

を使用して、テンプレート内のユーザーのログインのために利用可能なアクセス許可を確認することができ

: -

{{ perms.app_name }} 

を特定のモデルの場合: -

{{ perms.app_name.model_name }} 

ここで今

from django.contrib.auth.decorators import permission_required 
@permission_required('polls.can_vote') 
def my_view(request): 
... 

「世論調査」上の権限を持つユーザーcan_voteます - :あなたはこのように権限必要なデコレータを使用することができますビューの特定のモデルに特定の権限を持つユーザーにアクセスを許可するとしますアクセス許可を許可する。あなたが参照することができ、さらに詳細な使用のために

: -

Django documentation on permissions.

認証バックエンドは、ユーザーの権限を担当しています。私はあなた自身のカスタム認証バックエンドを使用していると思います。しかし、そうしている場合、ModelBackendをインポートするのを忘れているかもしれません。 from django.contrib.auth.backends import ModelBackend

私はuser.user_permissions.add `によってuser_permissionテーブルにいくつかの特定の権限を追加登録に

class EmailBackend(ModelBackend): 
+0

さて独自のバックエンドには、このバックエンドを延長することを確認してください(*パーマ) '。 user.user_permissions.all()によってアクセス権にアクセスすると、上記のエラーが表示されます。これは私が理解していないものです。 – Shashank

関連する問題