があり、私はemp.has_perm('myappname.is_member')
が実際False
ことを期待します。新しいEmployer
オブジェクトに明示的に与えない限り、is_member
権限は持っていません。
は、プログラムで使用すると、実際の権限オブジェクトを取得し、それを追加する必要があり、それに許可を与えるEmployer
さんuser_permissions
:、あなたが許可キャッシュを削除する必要があるかもしれません
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
content_type = ContentType.objects.get_for_model(Employer)
permission = Permission.objects.get(content_type=content_type, codename='is_member')
emp = Employer.objects.create(blablabla)
emp.save()
emp.user_permissions.add(permission)
はシェルでそれをテストするにはご質問への対応
delattr(emp, '_perm_cache')
:それはそうhas_perm
は実際の権限が反映されない場合があり、各USER-のために作成され
あなたはすべての単一Employer
がis_member
権限を持っているしたい場合は、いくつかのオプションがあります。
は、それが新しいオブジェクトであることを意味している(何もself.pk
がないかどうかを確認するためにEmployer
のsave
メソッドをオーバーライドします私は保存した後に上記のように許可を作成します。非常にきれいではありませんが、うまくいくでしょう。
あなた自身でauthentication backendを書きます。許可コードが'is_member'
で、User
はEmployer
インスタンスを持っている場合は、True
を返すアクセス許可を使用しないでください。権限システムは、権限を動的に付与および取り消すことができるように設計されています。 User
がEmployer
であるかどうかだけ気になる場合は、それをテストしてください。権限を使用して複雑にしないでください。
OKモデルに作成されたすべてのオブジェクトにこのアクセス権があるという意味のモデルにアクセス許可を追加したい場合はどうすればいいですか?私は容赦しています。しかし、私は非常に混乱しています –
それはアクセス許可の仕組みではありません。 'is_member'パーミッションを追加しても、すべての' Employee'がそのパーミッションを持つことになるわけではありません。つまり、「従業員」はその許可を持っています。 – dgel
ありがとうございました:) –