day42 crm开发之跟进记录编辑和删除

功能实现

修改路由:

进入跟进记录列表页面报错,提示编辑功能入参有两个但是我们穿了一个

我们需要处理stark组件中编辑功能

不过stark组件是通用功能,不能编辑,我们需要在web应用中加

from django.utils.safestring import mark_safe
    def display_edit_del(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return '操作'
        customer_id = kwargs.get('customer_id')
        tpl = '<a href="%s">编辑</a> <a href="%s">删除</a>' % (
            self.reverse_change_url(pk=obj.pk, customer_id=customer_id),
            self.reverse_delete_url(pk=obj.pk, customer_id=customer_id))
        return mark_safe(tpl)

修改stark组件通用代码,有定制的时候取定制,无定制就取默认

修改为

chagelist_view处理表内容新增入参

change_view新增入参

delete_view新增入参

漏洞处理

以上实现方式有漏洞,即通过修改url可以编辑和删除不是自己数据

新增漏洞处理

修改通用组建中增加页面代码

编辑web应用中跟进记录保存逻辑

    def save(self, request, form, is_update, *args, **kwargs):
        if not is_update:
            customer_id = kwargs.get('customer_id')
            current_user_id = request.session['user_info']['id']

            object_exists = models.Customer.objects.filter(id=customer_id,
                                                           consultant_id=current_user_id).exists()
            if not object_exists:
                return HttpResponse('非法操作')

            if not is_update:
                form.instance.customer_id = customer_id
                form.instance.consultant_id = current_user_id
        form.save()

效果展示

编辑漏洞处理

需要修改通用组件
修改页面函数

修改为:

跟进记录视图函数增加编辑页面处理逻辑

    def get_change_object(self, request, pk, *args, **kwargs):
        customer_id = kwargs.get('customer_id')
        current_user_id = request.session['user_info']['id']
        return models.ConsultRecord.objects.filter(pk=pk, customer_id=customer_id,
                                                   customer__consultant_id=current_user_id).first()

效果展示:

删除漏洞处理

需要修改通用组件
修改删除函数

web应用跟进记录新增删除逻辑

    def delete_object(self, request, pk, *args, **kwargs):
        customer_id = kwargs.get('customer_id')
        current_user_id = request.session['user_info']['id']

        record_queryset = models.ConsultRecord.objects.filter(pk=pk, customer_id=customer_id,
                                                              customer__consultant_id=current_user_id)

        if not record_queryset.exists():
            return HttpResponse('要删除的记录不存在,请重新选择!')
        record_queryset.delete()

效果展示:

posted @ 2022-03-12 16:37  simon_T  阅读(71)  评论(0编辑  收藏  举报