【发布时间】:2019-06-18 16:54:21
【问题描述】:
基本上,我有一个问题,我有一个使用 rest 框架的页面,它通过更改组或更改名称和密码等其他次要信息来编辑用户(我正在使用默认的 django 用户应用程序)权限。但是,当我编辑一组用户时,并且仅当我编辑它们时,出于某种原因,用户权限仅在我重新启动 django 服务器时才会更改,从而允许用户查看他不应该看到的 django cms 页面。服务器重新启动后,所有权限都可以正常工作。
我已经尝试像这样强制刷新权限:
for app in settings.INSTALLED_APPS:
create_permissions(apps.get_app_config(app.split(".")[-1]))
但是没有用。
我实际上不知道问题的原因是什么,以至于我不确定我可以在这里放什么代码,所以有疑问我会发布其余的用户序列化程序:
# -*- coding: utf-8 -*-
from rest_framework import serializers
from django.contrib.auth.models import User
class UserSerializer(serializers.ModelSerializer):
def __init__(self, *args, **kwargs):
super(UserSerializer, self).__init__(*args, **kwargs)
self.fields['username'].label = u"Usuário"
self.fields['password'].label = u"Senha"
self.fields['first_name'].label = u"Nome Completo"
group_name = serializers.SerializerMethodField()
def get_group_name(self, obj):
return ", ".join(list(obj.groups.values_list('name',flat=True)))
def create(self, validated_data):
user = super(UserSerializer, self).create(validated_data)
user.set_password(validated_data['password'])
user.save()
return user
def update(self, instance, validated_data):
user = super(UserSerializer, self).update(instance, validated_data)
if "password" in validated_data:
user.set_password(validated_data['password'])
user.save()
return user
class Meta:
model = User
fields = [
"id",
"first_name",
"username",
"password",
"group_name",
"groups",
"is_active",
]
【问题讨论】:
-
你在使用某种缓存吗?如果您重新启动并且权限正常,则您的功能正在按预期保存更改。检查您是否有一些缓存,或者您是否依赖于
request.session。 -
不,不使用缓存,除非使用 django cms 或 rest 框架,但是,django cms 确实有一个 perms 缓存,但是,我在设置中禁用了它
CMS_PAGE_CACHE = CMS_PLACEHOLDER_CACHE = CMS_PLUGIN_CACHE = False但它说如果页面需要登录,它不记录缓存的文档,无论如何他们都会这样做。
标签: python django permissions django-rest-framework django-cms