そのためには、単一の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)