From 633b06b0d9db8686f7c9bca8500652bb28547494 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 20 Sep 2024 05:15:17 +0000 Subject: [PATCH 1/8] =?UTF-8?q?fix:=20auth=E9=A1=BA=E5=BA=8F=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test_server/server/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_server/server/settings.py b/test_server/server/settings.py index 5064bf0..fda23b2 100644 --- a/test_server/server/settings.py +++ b/test_server/server/settings.py @@ -143,9 +143,9 @@ STATIC_ROOT = os.path.join(BASE_DIR, 'dist/static') REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ + 'crm.authentication.MyTokenAuthentication', 'rest_framework.authentication.BasicAuthentication', 'rest_framework.authentication.SessionAuthentication', - 'crm.authentication.MyTokenAuthentication' ], 'DEFAULT_PERMISSION_CLASSES':[ 'crm.permission.MyPermission' From 8c66a615090b9b262107a2f419fb544815366b9f Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 20 Sep 2024 05:42:35 +0000 Subject: [PATCH 2/8] =?UTF-8?q?feat:=20=E6=9D=83=E9=99=90=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test_server/rbac/permission.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/test_server/rbac/permission.py b/test_server/rbac/permission.py index 9642442..4480416 100644 --- a/test_server/rbac/permission.py +++ b/test_server/rbac/permission.py @@ -19,8 +19,8 @@ def get_permission_list(user): menus = get_all_menu_queryset(user) perms_list = menus.values_list('method',flat=True) perms_list = list(perms_list) - if user.is_superuser: - perms_list.append('admin') + # if user.is_superuser: + # perms_list.append('admin') if perms_list: return list(perms_list) return ['basic'] @@ -43,9 +43,7 @@ class RbacPermission(BasePermission): else: perms = get_permission_list(request.user) if perms: - if 'admin' in perms: - return True - elif request.user.is_superuser: + if request.user.is_superuser: return True elif not hasattr(view, 'perms_map'): return True From cfaadc035aeaacd88de22a0766e64f600a5ccbd8 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 20 Sep 2024 06:47:32 +0000 Subject: [PATCH 3/8] =?UTF-8?q?feat:=20=E9=92=88=E5=AF=B9=E5=9C=B0?= =?UTF-8?q?=E5=9D=AA=E7=9A=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/migrations/0015_auto_20240914_1103.py | 47 ++++++++++++++ .../cms/migrations/0016_auto_20240914_1403.py | 18 +++++ .../cms/migrations/0017_auto_20240914_1405.py | 18 +++++ .../cms/migrations/0018_auto_20240918_1109.py | 22 +++++++ test_server/cms/models.py | 24 ++++++- test_server/cms/serializers.py | 65 ++++++++++++++++++- test_server/cms/urls.py | 4 +- test_server/cms/views.py | 39 ++++++++++- .../crm/migrations/0047_auto_20240919_1605.py | 23 +++++++ test_server/crm/models.py | 2 + 10 files changed, 255 insertions(+), 7 deletions(-) create mode 100644 test_server/cms/migrations/0015_auto_20240914_1103.py create mode 100644 test_server/cms/migrations/0016_auto_20240914_1403.py create mode 100644 test_server/cms/migrations/0017_auto_20240914_1405.py create mode 100644 test_server/cms/migrations/0018_auto_20240918_1109.py create mode 100644 test_server/crm/migrations/0047_auto_20240919_1605.py diff --git a/test_server/cms/migrations/0015_auto_20240914_1103.py b/test_server/cms/migrations/0015_auto_20240914_1103.py new file mode 100644 index 0000000..08c66f3 --- /dev/null +++ b/test_server/cms/migrations/0015_auto_20240914_1103.py @@ -0,0 +1,47 @@ +# Generated by Django 3.2.12 on 2024-09-14 03:03 + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('cms', '0014_auto_20231207_2146'), + ] + + operations = [ + migrations.CreateModel( + name='CompanyInfo', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_delete', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('company_name', models.CharField(max_length=50, verbose_name='父公司名称')), + ('edu_points', models.FloatField(blank=True, null=True, verbose_name='教育积分')), + ('co_sponsor_points', models.FloatField(blank=True, null=True, verbose_name='协办大赛积分')), + ('sum_points', models.FloatField(blank=True, null=True, verbose_name='总积分')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='ChildrenCompany', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_delete', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('child_company_name', models.CharField(max_length=50, verbose_name='子公司名称')), + ('child_edu_points', models.FloatField(blank=True, null=True, verbose_name='教育积分')), + ('child_co_sponsor_points', models.FloatField(blank=True, null=True, verbose_name='协办大赛积分')), + ('parent_compnay', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cms.companyinfo', verbose_name='父公司')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/test_server/cms/migrations/0016_auto_20240914_1403.py b/test_server/cms/migrations/0016_auto_20240914_1403.py new file mode 100644 index 0000000..8d912e2 --- /dev/null +++ b/test_server/cms/migrations/0016_auto_20240914_1403.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2024-09-14 06:03 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cms', '0015_auto_20240914_1103'), + ] + + operations = [ + migrations.RenameField( + model_name='childrencompany', + old_name='parent_compnay', + new_name='parent_comany', + ), + ] diff --git a/test_server/cms/migrations/0017_auto_20240914_1405.py b/test_server/cms/migrations/0017_auto_20240914_1405.py new file mode 100644 index 0000000..3f2bee1 --- /dev/null +++ b/test_server/cms/migrations/0017_auto_20240914_1405.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2024-09-14 06:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cms', '0016_auto_20240914_1403'), + ] + + operations = [ + migrations.RenameField( + model_name='childrencompany', + old_name='parent_comany', + new_name='parent_company', + ) + ] diff --git a/test_server/cms/migrations/0018_auto_20240918_1109.py b/test_server/cms/migrations/0018_auto_20240918_1109.py new file mode 100644 index 0000000..b22a553 --- /dev/null +++ b/test_server/cms/migrations/0018_auto_20240918_1109.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.12 on 2024-09-18 03:09 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cms', '0017_auto_20240914_1405'), + ] + + operations = [ + migrations.RemoveField( + model_name='childrencompany', + name='child_company_name', + ), + migrations.AddField( + model_name='article', + name='type', + field=models.IntegerField(default=0, verbose_name='类型'), + ), + ] diff --git a/test_server/cms/models.py b/test_server/cms/models.py index 57c0fa1..6391436 100644 --- a/test_server/cms/models.py +++ b/test_server/cms/models.py @@ -11,6 +11,7 @@ class Article(CommonModel): content = models.TextField(verbose_name='内容', blank=True) ifrom = models.CharField(max_length=60, verbose_name='来源') is_top = models.BooleanField('置顶', default=False) + type = models.IntegerField('类型', default=0) class Meta: verbose_name = '文章' @@ -63,5 +64,26 @@ class Threshold(CommonModel): cas = models.CharField('cas号', max_length=20) +class CompanyInfo(CommonModel): + company_name = models.CharField('父公司名称', max_length=50) + edu_points = models.FloatField('教育积分', null=True, blank=True) + co_sponsor_points = models.FloatField('协办大赛积分', null=True, blank=True) + sum_points = models.FloatField('总积分', null=True, blank=True) + + def __str__(self): + return self.company_name + + +class ChildrenCompany(CommonModel): + child_edu_points = models.FloatField('教育积分', null=True, blank=True) + child_co_sponsor_points = models.FloatField('协办大赛积分', null=True, blank=True) + parent_company = models.ForeignKey(CompanyInfo, verbose_name='父公司', on_delete=models.CASCADE) + + def __str__(self): + return self.child_company_name + + + + + - diff --git a/test_server/cms/serializers.py b/test_server/cms/serializers.py index b251921..b59a8b2 100644 --- a/test_server/cms/serializers.py +++ b/test_server/cms/serializers.py @@ -1,5 +1,5 @@ from rest_framework import serializers -from .models import Article, Material, Source, Threshold +from .models import Article, Material, Source, Threshold, CompanyInfo, ChildrenCompany from utils.constants import EXCLUDE_FIELDS_BASE @@ -47,4 +47,65 @@ class ThresholdSerializer(serializers.ModelSerializer): class PathSerializer(serializers.Serializer): - path = serializers.CharField(label='文件地址') \ No newline at end of file + path = serializers.CharField(label='文件地址') + + + +class CompanyInfoSerializer(serializers.ModelSerializer): + # children_companies = serializers.SerializerMethodField() + class Meta: + model = CompanyInfo + fields = '__all__' + + # def get_children_companies(self, obj): + # children = ChildrenCompany.objects.filter(parent_company=obj) + # return ChildrenCompanySerializer(children, many=True).data + + def create(self, validated_data): + instance = super().create(validated_data) + instance.sum_points = validated_data["edu_points"] + validated_data["co_sponsor_points"] + instance.save() + return instance + + + +class ChildrenCompanySerializer(serializers.ModelSerializer): + parent_company_name = serializers.StringRelatedField(source='parent_company.company_name', read_only=True) + class Meta: + model = ChildrenCompany + fields = '__all__' + + def create(self, validated_data): + instance = super().create(validated_data) + parent_company = instance.parent_company + children = ChildrenCompany.objects.filter(parent_company=parent_company) + + total_edu = sum(c.child_edu_points or 0 for c in children) + total_sponsor = sum(c.child_co_sponsor_points or 0 for c in children) + # 加上未保存的分数 + parent_company.edu_points = total_edu + parent_company.co_sponsor_points = total_sponsor + parent_company.sum_points = parent_company.edu_points + parent_company.co_sponsor_points + parent_company.save() + return instance + + +# # # 定义信号处理器 +# from django.db.models.signals import pre_save +# from django.dispatch import receiver +# from .models import ChildrenCompany, CompanyInfo + + +# @receiver(pre_save, sender=ChildrenCompany) +# def update_parent_sum_points(sender, instance, **kwargs): +# parent_company = instance.parent_company +# child_companies = ChildrenCompany.objects.filter(parent_company=parent_company) +# # 计算子公司的积分 +# child_edu_sum = sum(c.child_edu_points or 0 for c in child_companies) +# child_co_sponsor_sum = sum(c.child_co_sponsor_points or 0 for c in child_companies) + +# # 更新父公司的总积分 +# parent_company.edu_points = child_edu_sum +# parent_company.co_sponsor_points = child_co_sponsor_sum +# parent_company.sum_points = child_edu_sum + child_co_sponsor_sum +# parent_company.save() \ No newline at end of file diff --git a/test_server/cms/urls.py b/test_server/cms/urls.py index 3b0f40b..bb690d9 100644 --- a/test_server/cms/urls.py +++ b/test_server/cms/urls.py @@ -1,5 +1,5 @@ from django.urls import path,include -from .views import ArticleViewSet, MaterialViewSet, SourceViewSet, ThresholdViewSet +from .views import ArticleViewSet, MaterialViewSet, SourceViewSet, ThresholdViewSet, ConpamyInfoViewSet, ChildrenCompanyViewSet from rest_framework import routers @@ -8,6 +8,8 @@ router.register('article', ArticleViewSet, basename="article") router.register('material', MaterialViewSet, basename="material") router.register('source', SourceViewSet, basename='source') router.register('threshold', ThresholdViewSet, basename='threshold') +router.register('company', ConpamyInfoViewSet, basename='company') +router.register('childcomany', ChildrenCompanyViewSet, basename='child_company') urlpatterns = [ path('', include(router.urls)), diff --git a/test_server/cms/views.py b/test_server/cms/views.py index 503dd69..6f215bb 100644 --- a/test_server/cms/views.py +++ b/test_server/cms/views.py @@ -11,8 +11,8 @@ from openpyxl import load_workbook, Workbook from django.db import transaction # Create your views here. -from .models import Article, Material, Source, Threshold -from .serializers import ArticelSerializer, ArticelListSerializer, MaterialSerializer, SourceSerializer, ThresholdSerializer, PathSerializer +from .models import Article, Material, Source, Threshold, CompanyInfo, ChildrenCompany +from .serializers import ArticelSerializer, ArticelListSerializer, MaterialSerializer, SourceSerializer, ThresholdSerializer, PathSerializer, CompanyInfoSerializer, ChildrenCompanySerializer from utils.custom import CommonPagination class ArticleViewSet(ModelViewSet): """ @@ -25,9 +25,10 @@ class ArticleViewSet(ModelViewSet): serializer_class = ArticelSerializer pagination_class = CommonPagination filter_backends = [DjangoFilterBackend,SearchFilter, OrderingFilter] - search_fields = ['title','content'] + search_fields = ['title','content', 'types'] ordering_fields = ['title','update_time'] ordering = ['-is_top', '-update_time'] + filterset_fields = ['type'] def get_serializer_class(self): if self.action=='list': @@ -45,6 +46,38 @@ class ArticleViewSet(ModelViewSet): instance.save() return Response(status=status.HTTP_200_OK) + +class ConpamyInfoViewSet(ModelViewSet): + """ + 父公司:增删改查 + """ + perms_map = [ + {'get': '*'}, {'post': 'article_create'}, + {'put': 'article_update'}, {'delete': 'article_delete'}] + queryset = CompanyInfo.objects.filter(is_delete=0).all() + serializer_class = CompanyInfoSerializer + pagination_class = CommonPagination + filter_backends = [DjangoFilterBackend,SearchFilter, OrderingFilter] + search_fields = ['company_name'] + ordering_fields = ['update_time'] + ordering = ['-sum_points'] + + +class ChildrenCompanyViewSet(ModelViewSet): + """ + 子公司:增删改查 + """ + perms_map = [ + {'get': '*'}, {'post': 'article_create'}, + {'put': 'article_update'}, {'delete': 'article_delete'}] + queryset = ChildrenCompany.objects.filter(is_delete=0).all() + serializer_class = ChildrenCompanySerializer + pagination_class = CommonPagination + filter_backends = [DjangoFilterBackend,SearchFilter, OrderingFilter] + filterset_fields = ['parent_company'] + ordering_fields = ['update_time'] + ordering = ['-update_time'] + class MaterialViewSet(ModelViewSet): """ 资料:增删改查 diff --git a/test_server/crm/migrations/0047_auto_20240919_1605.py b/test_server/crm/migrations/0047_auto_20240919_1605.py new file mode 100644 index 0000000..3ed4302 --- /dev/null +++ b/test_server/crm/migrations/0047_auto_20240919_1605.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.12 on 2024-09-19 08:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0046_auto_20230407_1012'), + ] + + operations = [ + migrations.AddField( + model_name='candidate', + name='gender', + field=models.CharField(blank=True, max_length=10, null=True, verbose_name='性别'), + ), + migrations.AddField( + model_name='candidate', + name='opllevel', + field=models.CharField(blank=True, max_length=60, null=True, verbose_name='职业等级'), + ), + ] diff --git a/test_server/crm/models.py b/test_server/crm/models.py index ca72c64..643245b 100644 --- a/test_server/crm/models.py +++ b/test_server/crm/models.py @@ -129,6 +129,8 @@ class Candidate(CommonModel): train_start_date = models.DateField('培训开始日期', null=True) train_end_date = models.DateField('培训结束日期', null=True) create_admin = models.ForeignKey(UserProfile, verbose_name="创建管理员", null=True, blank=True, on_delete=models.SET_NULL) + gender = models.CharField('性别', max_length=10, null=True, blank=True) + opllevel = models.CharField('职业等级',max_length=60, null=True, blank=True) class Meta: verbose_name = '证书' From 742b12fd37f66a30de01f6ab33c48b4f7e84046c Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 20 Sep 2024 07:05:29 +0000 Subject: [PATCH 4/8] =?UTF-8?q?feat:=20mypermission=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test_server/crm/permission.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/test_server/crm/permission.py b/test_server/crm/permission.py index 7031c3d..1212d16 100644 --- a/test_server/crm/permission.py +++ b/test_server/crm/permission.py @@ -53,11 +53,10 @@ class MyPermission(RbacPermission): :return: """ perms = [] - # if 'perms' in request.session: - # perms = request.session['perms'] if isinstance(request.user, UserProfile): # 如果是管理员表 - # perms = get_permission_list(request.user) - return True + if 'perms' in request.session: + perms = request.session['perms'] + perms.extend(ConsumerPerms) elif isinstance(request.user, Consumer): # 如果是客户 perms = cache.get('cperms_'+str(request.user.id), None) if not perms: From ab94dc48c45b8a7078d749a9a84d375b809827df Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 23 Sep 2024 10:46:57 +0800 Subject: [PATCH 5/8] =?UTF-8?q?feat:=20=E8=8B=A5=E6=98=AF=E8=B6=85?= =?UTF-8?q?=E7=AE=A1=EF=BC=8C=E6=9D=83=E9=99=90=E9=83=BD=E6=94=BE=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test_server/crm/permission.py | 2 ++ test_server/rbac/permission.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/test_server/crm/permission.py b/test_server/crm/permission.py index 1212d16..0cb1f7d 100644 --- a/test_server/crm/permission.py +++ b/test_server/crm/permission.py @@ -54,6 +54,8 @@ class MyPermission(RbacPermission): """ perms = [] if isinstance(request.user, UserProfile): # 如果是管理员表 + if request.user.is_superuser: + return True if 'perms' in request.session: perms = request.session['perms'] perms.extend(ConsumerPerms) diff --git a/test_server/rbac/permission.py b/test_server/rbac/permission.py index 4480416..3c2f41d 100644 --- a/test_server/rbac/permission.py +++ b/test_server/rbac/permission.py @@ -38,6 +38,8 @@ class RbacPermission(BasePermission): :return: """ perms = [] + if request.user.is_superuser: + return True if 'perms' in request.session: perms = request.session['perms'] else: From 0b31dad59b0777c7d6059663f0e63070a0b88466 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 23 Sep 2024 03:34:44 +0000 Subject: [PATCH 6/8] =?UTF-8?q?feat:=20=E8=B0=83=E6=95=B4=E6=9D=83?= =?UTF-8?q?=E9=99=90=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test_server/crm/permission.py | 9 +++++---- test_server/question/views.py | 4 ++-- test_server/rbac/permission.py | 18 +++++++++--------- test_server/rbac/views/user.py | 4 ++-- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/test_server/crm/permission.py b/test_server/crm/permission.py index 0cb1f7d..e6ab526 100644 --- a/test_server/crm/permission.py +++ b/test_server/crm/permission.py @@ -5,6 +5,8 @@ from rest_framework.permissions import IsAuthenticated from django.core.cache import cache from django.utils import timezone from datetime import datetime, timedelta +from django.core.cache import cache +from rbac.permission import get_permission_list # 学员接口列表 ConsumerPerms = [ 'paper_view', @@ -54,10 +56,9 @@ class MyPermission(RbacPermission): """ perms = [] if isinstance(request.user, UserProfile): # 如果是管理员表 - if request.user.is_superuser: - return True - if 'perms' in request.session: - perms = request.session['perms'] + perms = cache.get(f'{request.user.id}_perms', None) + if perms is None: + perms = get_permission_list(request.user) perms.extend(ConsumerPerms) elif isinstance(request.user, Consumer): # 如果是客户 perms = cache.get('cperms_'+str(request.user.id), None) diff --git a/test_server/question/views.py b/test_server/question/views.py index 31a0314..4e4ecdb 100644 --- a/test_server/question/views.py +++ b/test_server/question/views.py @@ -29,7 +29,7 @@ class SubjectViewSet(ModelViewSet): 学科分类:增删改查 """ perms_map = ( - {'get': 'subject_view'}, {'post': 'subject_create'}, + {'get': '*'}, {'post': 'subject_create'}, {'put': 'subject_update'}, {'delete': 'subject_delete'}) queryset = Questioncat.objects.filter(is_subject=True,is_delete=0).all().order_by("id") serializer_class = SubjectSerializer @@ -44,7 +44,7 @@ class QuestioncatViewSet(ModelViewSet): 题库分类:增删改查 """ perms_map = ( - {'get': 'questioncat_view'}, {'post': 'questioncat_create'}, + {'get': '*'}, {'post': 'questioncat_create'}, {'put': 'questioncat_update'}, {'delete': 'questioncat_delete'}) queryset = Questioncat.objects.filter(is_delete=0,is_subject=False).all() serializer_class = QuestioncatSerializerDefault diff --git a/test_server/rbac/permission.py b/test_server/rbac/permission.py index 3c2f41d..243a6a4 100644 --- a/test_server/rbac/permission.py +++ b/test_server/rbac/permission.py @@ -1,5 +1,6 @@ from rest_framework.permissions import BasePermission from .models import Menu +from django.core.cache import cache def get_all_menu_queryset(user): @@ -19,11 +20,13 @@ def get_permission_list(user): menus = get_all_menu_queryset(user) perms_list = menus.values_list('method',flat=True) perms_list = list(perms_list) - # if user.is_superuser: - # perms_list.append('admin') + perms_l = [] if perms_list: - return list(perms_list) - return ['basic'] + perms_l = perms_list + else: + perms_l = ['basic'] + cache.set(f'{user.id}_perms', perms_l, timeout=None) + return perms_l class RbacPermission(BasePermission): """ @@ -38,11 +41,8 @@ class RbacPermission(BasePermission): :return: """ perms = [] - if request.user.is_superuser: - return True - if 'perms' in request.session: - perms = request.session['perms'] - else: + perms = cache.get(f'{request.user.id}_perms', None) + if perms is None: perms = get_permission_list(request.user) if perms: if request.user.is_superuser: diff --git a/test_server/rbac/views/user.py b/test_server/rbac/views/user.py index 0440c22..b52fc7d 100644 --- a/test_server/rbac/views/user.py +++ b/test_server/rbac/views/user.py @@ -30,6 +30,7 @@ from ..serializers.user_serializer import (UserCreateSerializer, from server.conf import * from rest_framework_jwt.serializers import jwt_encode_handler from crm.views import my_payload_handler +from django.core.cache import cache class UserLogoutView(APIView): authentication_classes = () @@ -46,7 +47,6 @@ class UserInfoView(APIView): if request.user.id is not None: user = request.user perms = get_permission_list(user) - request.session['perms'] = perms # 存到session表中 data = { 'id': user.id, 'username': user.username, @@ -73,7 +73,7 @@ class UserViewSet(PageOrNot, ModelViewSet): """ 用户管理:增删改查 """ - perms_map = ({'get': 'user_list'}, {'post': 'user_create'}, {'put': 'user_update'}, + perms_map = ({'get': 'user_view'}, {'post': 'user_create'}, {'put': 'user_update'}, {'delete': 'user_delete'}) queryset = UserProfile.objects.filter(is_delete=0).all() serializer_class = UserListSerializer From b6851957064cacf99d8666598498000c2acd4a25 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 23 Sep 2024 13:43:37 +0800 Subject: [PATCH 7/8] =?UTF-8?q?feat:=20=E8=8B=A5=E6=98=AF=E8=B6=85?= =?UTF-8?q?=E7=AE=A1=EF=BC=8C=E6=9D=83=E9=99=90=E9=83=BD=E6=94=BE=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test_server/crm/permission.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test_server/crm/permission.py b/test_server/crm/permission.py index e6ab526..cf462dc 100644 --- a/test_server/crm/permission.py +++ b/test_server/crm/permission.py @@ -56,6 +56,8 @@ class MyPermission(RbacPermission): """ perms = [] if isinstance(request.user, UserProfile): # 如果是管理员表 + if request.user.is_superuser: + return True perms = cache.get(f'{request.user.id}_perms', None) if perms is None: perms = get_permission_list(request.user) From 779855ea629d4eaa83322a74b9481aa007a21c98 Mon Sep 17 00:00:00 2001 From: shijing Date: Fri, 27 Sep 2024 16:43:05 +0800 Subject: [PATCH 8/8] =?UTF-8?q?fix:=E6=9B=B4=E6=94=B9tinymce=E7=9A=84?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E5=9C=B0=E5=9D=80=EF=BC=88360=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test_client/src/components/Tinymce/index.vue | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test_client/src/components/Tinymce/index.vue b/test_client/src/components/Tinymce/index.vue index f351ede..a509749 100644 --- a/test_client/src/components/Tinymce/index.vue +++ b/test_client/src/components/Tinymce/index.vue @@ -15,9 +15,8 @@ import load from "./dynamicLoadScript"; import { upUrl, upHeaders } from "@/api/file"; import { getToken } from "@/utils/auth"; // why use this cdn, detail see https://github.com/PanJiaChen/tinymce-all-in-one -const tinymceCDN = - "https://cdn.jsdelivr.net/npm/tinymce-all-in-one@4.9.3/tinymce.min.js"; - +const tinymceCDN ="http://lib.baomitu.com/tinymce/4.9.3/tinymce.min.js"; + // "https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/tinymce/4.9.3/tinymce.min.js"; export default { name: "Tinymce", props: {