私が取り組んでいるDjangoサイトは、ユーザーがアカウントにサインアップする可能性があります。それらにいくつかの編集機能を提供するために、私は組み込みのDjango管理者を使用します。しかし、私は問題を抱えています:ユーザがサインアップした後、Django管理者の権限がなく、表示権限さえありません。したがって、私の質問:管理者のユーザーを編集するときに、「ユーザー権限」セクションで手動で割り当てることができるのと同じ方法で、関連するモデルの管理者権限をユーザーに割り当てる方法を教えてください。私はすでに、usualhas_xxx_permissions()
のカスタムModelAdmin
クラスを使って試してみましたが、うまくいきませんでした。だから私の推測は、私は何かを見落としたことです。何か案は?あなたの目的のためにプログラムでDjangoの管理者権限を設定する
答えて
https://docs.djangoproject.com/en/dev/topics/auth/default/#permissions-and-authorization
new_user.user_permissions.add(permission1, permission2, etc...)
'user.user_permissions.add()'だけが私のために働いていました。 Django 1.4では 'AttributeError:' User.permissions.add() ''だけを試してみた場合、 'User'オブジェクトに属性 'permissions'はありません。 – tar
、それはおそらく、特定のグループにすべての新しいユーザーを割り当てて、そのグループにユーザーが必要とするすべての権限を与えるためにはるかに簡単で、かつ効率的です。グループのどのメンバーもこれらの権限を継承します。
グループ内でグループを作成し、そのグループに権限を割り当てることができます。次に、登録コードに次のようなものを追加するだけです。
try:
group = Group.objects.get(name='The User Group')
except Group.DoesNotExist:
# group should exist, but this is just for safety's sake, it case the improbable should happen
pass
else:
user.groups.add(group)
私はこれをこのようにすることができると思いますが、ユーザーに直接アクセス許可を適用することは、私にとっては「よかった」ようです(おそらく味の問題です)。しかし、他のユースケースについては、これを念頭に置いておきます。 – Timo
@Timo私はまったく同じです。理論的にはグループがよりエレガントであるにもかかわらず、それが確実であることを確認するもう一つのことです。私はこのようなことをもっとやる必要があるとき、私はグループに切り替えるつもりだと思っていますが、今のところ私はダイレクトパーマに固執します。 –
実際、dgelのコードサンプル([下](http://stackoverflow.com/a/10863809/61938)にリンクされています)が私の心を変えました。それはグループです! –
dgelの答えは私のための実用的なソリューションにつながる方向に私を指摘しました。基本的に、彼が何を示唆しているように見えることである:
- アクセス許可を設定するモデルのContentTypeを取得します。このコンテキストでは、コンテンツタイプはinformation about a Django modelを保持するオブジェクトです。
Permission.objects.get()
を使用して、コンテンツタイプと管理者が許可する操作で構成されるPermissionオブジェクトを作成します。唯一の難点は、codename
パラメータを調べることです。このパラメータは、管理者権限では、アクション(「追加」、「変更」または「削除」)、アンダースコア、およびモデル名で構成されます。したがって、Foo
というモデルがあり、すべてのアクセス許可を作成する場合は、モデルのコンテンツタイプにadd_foo
,change_foo
、およびdelete_foo
というコード名を加えた3つのアクセス許可が必要です。user.user_permissions.add(permission)
を使用してこれらのアクセス許可を割り当てます。
codeexamplesのdgelの回答に向かいます。既存のDjangoデータベースのauth app(manage.py dumpdata auth
)のデータダンプを見ると、権限の内部動作についての洞察も得られました。ジャンゴ1.6のよう
:
すべてのユーザーが許可に多対多のフィールドuser_permissions
を持っている - あなたはこれに権限を追加することができます
your_user.user_permissions.add(permission)
V1。6つのドキュメント:私はこれを見つけたので、
- Django.contrib.auth APIが
- Auth default permissions(クリア追加、削除する方法を示しています)
(ユーザー、グループ、およびPermissionオブジェクトを示して)私は正確にあなたの質問にお答えしますGoogleに質問する私はDjango 1.9で何をやっているのかをグループで示してから、それをユーザに行う方法を示します。 django.contrib.auth.modelsから
は、グループ、パーミッション グループを、インポート__ = Group.objects.get_or_create(名= 'my_group')
permissions = Permission.objects.all()
for p in permissions:
group.permissions.add(p)
group.save()
それは、ユーザに適応するために非常に簡単です:
from django.contrib.auth.models import Permission
permissions = Permission.objects.all()
for p in permissions:
youruser.user_permissions.add(p)
youruser.save()
今後の権限を追加する可能性があり、すべてのユーザーを再実行する代わりにグループに追加するだけでよいので、私はグループを優先します。
- 1. Djangoの管理者権限へのアクセス
- 2. スクリプトの管理者権限
- 3. 管理者権限でプログラムでVSTOアドインを起動する
- 4. JavaFX System.setProperty管理者権限
- 5. 管理者権限c#/ vb
- 6. 管理者権限のないプロセス/プログラムを停止する - python
- 7. Djangoのスタッフ権限を管理する
- 8. easy_installを-U setuptoolsの管理者権限
- 9. vb.netの管理者権限を作成
- 10. firebaseサーバ管理者権限で認証
- 11. グローバル管理者権限のないプロジェクト固有のワークフローを設定する
- 12. djangoの管理者のユーザ設定
- 13. 管理者権限を持つJavaプロジェクト
- 14. 管理者権限のないNSISインストーラ
- 15. 管理者権限のないSFML 1.6
- 16. Delphiの管理者権限D7 W7
- 17. 管理者権限のないWCFサーバー
- 18. django管理者の設定中に管理エラー
- 19. WordPressの管理者が一部の管理者権限を失った
- 20. Django Folders権限の設定?
- 21. OS Xの管理者権限でスクリプトを実行する
- 22. 管理者権限のないIEでサイトをブロックする
- 23. すべてのDjango管理者モデルの削除権限を削除します。
- 24. 管理者権限なしで強制的にプログラムを実行しますか?
- 25. 「CheckTokenMembership」で管理者権限を確認するC++
- 26. 管理者権限でWPFアプリケーションを実行するWIX
- 27. 管理者権限なしでneo4jを実行する
- 28. 管理者権限なしでプロセスを開始する方法
- 29. 管理者権限なしでレジストリを変更する
- 30. 管理者権限でのみ実行するWinformsデプロイメントプロジェクト
関連する回答[こちら](http://stackoverflow.com/questions/10131271/invalid-literal-error-when-adding-a-user-permission-to-a-django-user-object/10131510#10131510) )と[ここ](http://stackoverflow.com/questions/10252332/how-to-add-permissions-in-django-to-models-and-test-it-using-the-shell/10252613#10252613) 。 – dgel
パーフェクト - 私を正しい方向に向ける。どうもありがとうございました! – Timo