Django 1.7 - 以编程方式添加权限无法按预期工作

hak*_*aki 2 django permissions django-1.7

这里发生了什么 ?

> from django.contrib.auth.models import Permission
> from django.contrib.contenttypes.models import ContentType
> p = Permission.objects.filter(
    content_type = ContentType.objects.get_for_model(Transaction)
).get(
    codename = 'add_transaction'
)
> user.user_permissions.add(p)

> user.user_permissions.all()
[<Permission: myapp | Transaction | Can add Transaction>]
> user.get_all_permissions()
set([])
> user.has_perm('add_transaction')
False
> user.has_perm('myapp.add_transaction')
False
Run Code Online (Sandbox Code Playgroud)

我是否在某处错过了保存?

Ala*_*air 5

缓存ModelBackend用户对象的权限。Django文档建议您在更改权限后从数据库重新加载用户。

user.user_permissions.add(p)
user = User.objects.get(pk=user.pk)
Run Code Online (Sandbox Code Playgroud)

  • 不,“refresh_from_db”不会清除缓存。[文档](https://docs.djangoproject.com/en/2.1/topics/auth/default/#permission-caching)的评论中提到了这一点 (2认同)