所以我有以下内容:
Person - first_name, last_name
Puzzle - puzzle_name
Level - (bronze, silver, gold)
人们可以拥有各种谜题的权限,然后在这些谜题中拥有各种级别的权限。
所以在puzzle1上,你可以拥有银色等级,而在“拼图2”中,你可以拥有青铜级别。等
如何使用django的权限执行此操作?我在看django-guardian,但我不知道怎么做。
答案 0 :(得分:1)
单个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)