假设我有一个名为Blog的应用程序,其中包含帖子。我希望用户能够添加和更改帖子,但不能删除它们。
Django文档有这个例子
from myapp.models import BlogPost
from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType
content_type = ContentType.objects.get_for_model(BlogPost)
permission = Permission.objects.create(codename='can_publish',
name='Can Publish Posts',
content_type=content_type)
我不知道它在这里实际定义了什么,只是给它一个名称和内容类型。
Django还有基本权限检查
假设您有一个app_label foo和名为Bar的模型的应用程序,要测试您应该使用的基本权限:
add: user.has_perm('foo.add_bar')
change: user.has_perm('foo.change_bar')
delete: user.has_perm('foo.delete_bar')
在我的应用中,他们会成为:
add: user.has_perm('blog.add_post')
change: user.has_perm('blog.change_post')
delete: user.has_perm('blog.delete_post')
如何为用户创建和添加此类权限(在代码中,而不是管理员)?
答案 0 :(得分:0)
在代码中定义自定义权限可以通过模型的元素来完成(参见duplicate):
class BlogPost(models.Model):
class Meta:
permissions = (('can_publish', 'Can Publish Posts'),)
大多数情况下,不应在代码中添加每个用户权限,但如果您的版本足够高,则可以在使用south或内置django迁移时作为迁移的一部分添加。
python manage.py schemamigration $appname $migration_description --empty
class Migration(SchemaMigration):
def forwards(self, orm):
daemon = orm.User.objects.get(username='daemon')
daemon.user_permissions.add($permission)
daemon.save()
def backwards(self, orm):
daemon = orm.User.objects.get(username='daemon')
daemon.user_permissions.remove($permission)
daemon.save()