10

私が取り組んでいる Django サイトには、ユーザーがアカウントにサインアップできる可能性があります。いくつかの編集機能を提供するために、組み込みの Django admin を使用します。ただし、問題があります。ユーザーがサインアップした後、Django admin 内でアクセス許可がなく、表示アクセス許可さえありません。したがって、私の質問:管理者でユーザーを編集するときに、「ユーザー権限」セクションで手動で割り当てることができるのと同じ方法で、関連するモデルのユーザーに管理者権限をコードで割り当てるにはどうすればよいですか? カスタムクラスを使用して通常どおり 試してみましたが、うまくいきませんでした。だから私の推測では、私は明らかな何かを見落としていたと思います。何か案は?has_xxx_permissions()ModelAdmin

4

5 に答える 5

8

https://docs.djangoproject.com/en/dev/topics/auth/default/#permissions-and-authorization

new_user.user_permissions.add(permission1, permission2, etc...)
于 2012-06-01T15:34:05.760 に答える
5

あなたの目的のためには、すべての新しいユーザーを特定のグループに割り当て、そのグループにユーザーが必要とするすべてのアクセス許可を与える方が、おそらくはるかに簡単で効率的です。グループのメンバーは、これらの権限も継承します。

グループを作成し、管理者でアクセス許可を割り当てることができます。次に、登録コードに次のようなものを追加するだけです。

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)
于 2012-06-01T15:50:54.940 に答える
3

dgelの答えは、私にとって実用的な解決策につながる方向を示してくれました。本質的に、彼が示唆しているように見えるものは次のとおりです。

  1. アクセス許可を設定するモデルのContentTypeを取得します。このコンテキストでは、コンテンツ タイプはDjango モデルに関する情報を保持するオブジェクトです。
  2. を使用して、管理内で許可するコンテンツ タイプとアクションで構成されるPermissionオブジェクトを作成しますPermission.objects.get()。ここで唯一難しいのはcodename、管理者権限の場合、アクション (「追加」、「変更」、または「削除」)、アンダースコア、およびモデル名で構成されるパラメーターを理解することです。したがって、 というモデルがあり、そのモデルFooに対するすべてのパーミッションを作成する場合は、Fooモデルのコンテンツ タイプとコード名add_foochange_foo、および をそれぞれ持つ 3 つのパーミッションが必要になりdelete_fooます。
  3. を使用してこれらの権限を割り当てuser.user_permissions.add(permission)ます。

コード については、dgel の回答を参照してください。既存の Django データベースの認証アプリ ( manage.py dumpdata auth) のデータ ダンプを見ると、アクセス許可の内部動作についても洞察が得られました。

于 2012-06-02T15:58:37.137 に答える
2

Google でこの質問を見つけたので、あなたの質問に正確にお答えします。私が Django 1.9 でグループを使って何をしているかを示してから、それをユーザーに行う方法を示します。

from django.contrib.auth.models import Group, Permission group, __ = Group.objects.get_or_create(name='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()

将来アクセス許可を追加する可能性があり、すべてのユーザーをやり直す代わりにグループに追加できるため、グループを好みます。

于 2017-01-10T16:16:14.927 に答える
1

Django 1.6 以降:

すべてのユーザーには、アクセス許可に対する多対多のフィールドuser_permissionsがあります。これにアクセス許可を追加できます。

your_user.user_permissions.add(permission)

v1.6 ドキュメント:

于 2014-02-05T16:12:01.067 に答える