0

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

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

4

1 回答 1

0

可以通过模型的元数据在代码中定义自定义权限(请参阅副本):

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()
于 2014-09-30T01:03:08.677 回答