我正在尝试迁移我的模型以使用 Guardian 权限。此时我有:
class Data(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Meta:
permissions = (
('view', 'View'),
('edit', 'Edit'),
('owner', 'Owner'),
)
我创建了一个添加了新权限的迁移,并且在自定义迁移中我尝试分配如下权限:
def assignDataPermissions(apps, schema_editor):
Data = apps.get_model('api', 'Data')
for data in Data.objects.all():
assign_perm('api.owner', data.user, data)
class Migration(migrations.Migration):
dependencies = [
('api', '0169_auto_20180304_1619'),
]
operations = [
migrations.RunPython(assignDataPermissions)
]
此操作失败
guardian.exceptions.NotUserNorGroup:需要 User/AnonymousUser 或 Group 实例(获取 EmailUser 对象)
。
是否有更好/正确的方式迁移到 Guardian?如果没有,我如何让它看到我的自定义用户类?
最佳答案
我最终使用了更高级别的解决方法。
在迁移内部,data.user
实际上是 __fake.EmailUser
的对象,而 get_user_model()
返回 custom_user.models.EmailUser
。结果,Guardian 未能检查 isinstance(identity, get_user_model())
。
我的解决方法(hack?)是从与 data.user
对应的数据库中显式获取 EmailUser
对象。就像这样:
def assignDataPermissions(apps, schema_editor):
Data = apps.get_model('api', 'Data')
User = get_user_model()
for data in Data.objects.all():
user = User.objects.get(id=data.user_id)
assign_perm('api.owner', user, data)
关于django - 使用自定义用户类迁移到 django-guardian 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49100963/