1

だから私は次のものを持っています:

Person - first_name, last_name

Puzzle - puzzle_name

Level - (bronze, silver, gold)

人はさまざまなパズルへのアクセス許可を持つことができ、それらのパズルのさまざまなレベルへのアクセス許可を持つことができます。

したがって、パズル 1 ではシルバー レベル、パズル 2 ではブロンズ レベルを持つことができます。等。

djangoの権限でこれを行うにはどうすればよいですか? django-guardian を見ていましたが、やり方がわかりません。

4

1 に答える 1

2

そのためには、単一のPuzzleモデルで十分なはずです。デフォルトのUserモデルには、姓と名のフィールドがすでにあります。レベルは権限になります。

お役に立てれば:

いくつかでmodels.py

from django.db import models


BRONZE_LEVEL = 'access_to_bronze_level_puzzle'
SILVER_LEVEL = 'access_to_silver_level_puzzle'
GOLD_LEVEL = 'access_to_gold_level_puzzle'


class Puzzle(models.Model):
    name = models.Charfield(max_length=30)

    class Meta:
        permissions = (
            (BRONZE_LEVEL, 'Can play the puzzle in bronze level'),
            (SILVER_LEVEL, 'Can play the puzzle in silver level'),
            (GOLD_LEVEL, 'Can play the puzzle in gold level'),
        )

django の組み込みパーミッションを使用すると、特定のユーザー (またはユーザー グループ) にすべてのパズルのゴールド レベルへのアクセスを許可できます。

パズル インスタンスごとに個別のレベル制限を設けたい場合は、外部アプリが必要です。django-guardianは確かに適切です。

プロジェクトでガーディアンをセットアップするには、以下を に追加しますsettings.py

# The auth middleware:

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',  # default
    'guardian.backends.ObjectPermissionBackend',  # django-guardian per object permissions
)

# Add 'guardian' to `INSTALLED_APPS`.
INSTALLED_APPS = (
    # All the other apps
    # ...
    'guardian',
)

# Define the ID for the anonymous user
# Required because guardian supports permissions for users not logged in
ANONYMOUS_USER_ID = -1`

これでmanage.py syncdb(またはmigrate南を使用している場合)、すべて問題ありません。次の方法で、ユーザーまたはグループへのアクセスを割り当てたり削除したりできます。

from guardian.shortcuts import assign_perm, remove_perm
from yourapp.models import BRONZE_LEVEL, SILVER_LEVEL, GOLD_LEVEL


assign_perm(GOLD_LEVEL, some_user_instance, some_puzzle_instance)
remove_perm(GOLD_LEVEL, some_group_instance, some_puzzle_instance)
于 2013-09-20T23:36:23.573 に答える