1

所以我有以下内容:

Person - first_name, last_name

Puzzle - puzzle_name

Level - (bronze, silver, gold)

人们可以拥有各种谜题的权限,然后在这些谜题中拥有不同级别的权限。

所以在puzzle1上,你可以有银牌,在puzzle2上你可以有铜牌。等等。

如何使用 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 回答