在Django中创建和设置权限

时间:2013-11-08 16:37:56

标签: django

假设我有一个名为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')

如何为用户创建和添加此类权限(在代码中,而不是管理员)?

1 个答案:

答案 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()