最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】内容管理系统的统计列表中只列当前组的用户

Django crifan 2373浏览 0评论

已有一个Antd Pro的前端+Django的后端的cms管理系统,其中统计列表中,对于一个小组组长:

的话,看到的统计页中只应该列出自己和组员的数据,而不是现在的所有用户的数据:

然后想要:

【已解决】js中对于数组的for循环中是否有类似于Python中的enumerate

但是却又出错:

【已解决】Django中request.query_params无法获取GET传递的参数

然后终于可以正常返回组内成员的列表了:

【总结】

此处想要返回组内成员的列表的相关改动是:

1.解析相关数据获得当前用户(组长)所在的组

  componentDidMount() {

    const { dispatch, currentUser, currentUserFunctionGroupList } = this.props;

    const functionGroupNames = localStorage.getItem(‘functionGroupNames’).split(‘,’);

    const functionGroupOwners = localStorage.getItem(‘functionGroupOwners’).split(‘,’);

    const functionGroupIDs = localStorage.getItem(‘functionGroupIDs’).split(‘,’);

    let functionGroupId = ”;

    /* eslint-disable */

    // for (let i = 0; i < functionGroupNames.length; i++) {

    //   if (functionGroupNames[i].includes(‘script’) && functionGroupOwners[i] !== ”) {

    //     functionGroupId = functionGroupIDs[i]

    //   }

    // }

    /* eslint-disable */

    // Note:

    // 1. only current group owner can see this GroupOwnerScriptCount page

    // 2. one user only allow join in one group

    // 3. so here current user is current group owner

    let curUserName = ""

    if (currentUser){

      curUserName = currentUser.name

    }

    console.log("curUserName=", curUserName)

    // generate function group info dict

    if (functionGroupNames && functionGroupOwners && functionGroupIDs) {

      let functionGroupInfoDictList = []

      for(let curIdxValueList of functionGroupNames.entries()){

        console.log("curIdxValueList=", curIdxValueList)

        let curIdx = curIdxValueList[0]

        let curGroupName = curIdxValueList[1]

        console.log("curIdx=", curIdx, "curGroupName=", curGroupName)

        let curGroupOwnerName = functionGroupOwners[curIdx]

        let curGroupId = functionGroupIDs[curIdx]

        console.log("curGroupOwnerName=", curGroupOwnerName, "curGroupId=", curGroupId)

        if (curUserName == curGroupOwnerName){

          functionGroupId = curGroupId

          console.log("functionGroupId=", functionGroupId)

        }

        let curGroupInfoDict = {

          "groupId": curGroupId,

          "groupName": curGroupName,

          "groupOwnerName": curGroupOwnerName,

        }

        functionGroupInfoDictList.push(curGroupInfoDict)

      }

      console.log("functionGroupInfoDictList=", functionGroupInfoDictList)

    }

    console.log(`currentUser=`, currentUser)

    console.log(`currentUserFunctionGroupList=`, currentUserFunctionGroupList)

    console.log(`functionGroupNames=`, functionGroupNames)

    console.log(`functionGroupOwners=`, functionGroupOwners)

    console.log(`functionGroupIDs=`, functionGroupIDs)

    console.log(`functionGroupId=`, functionGroupId)

    const params = {

      function_group_id: functionGroupId,

    };

    console.log(`params=`, params)

    dispatch({

      type: ‘script/fetchUserScriptsCount’,

      payload: params,

    });

    dispatch({

      type: ‘user/fetchCurrent’,

    });

  }

2.改掉之前笔误:

    const params = {

      function_group_id: functionGroupId,

    };

就可以把function_group_id传递到Django后台,然后后台的原有代码:

    def user_scripts_count(self, request):

        logger.info("user_scripts_count: request=%s", request)

        queryParams = request.query_params

        logger.info("queryParams=%s", queryParams)

        function_group_id = queryParams.get(‘function_group_id’, None)

        logger.info("function_group_id=%s", function_group_id)

        if function_group_id:

            function_group = FunctionGroup.objects.get(pk=function_group_id)

            logger.info("function_group=%s", function_group)

            user_queryset = function_group.members.all()

            logger.info("user_queryset=%s", user_queryset)

        else:

            user_queryset = User.objects.filter(is_active=True)

即可正常返回只属于当前用户所在的组的用户的列表了:

【后记】

后来发现,对于另外的超级管理员的话,上述逻辑是不严谨,有问题的:

即:

对于name为空字符串的话,也会获得对应的groupd的id

更严重的是:

此处不仅仅要去判断group的owner的name相等

还要判断

是"script_function_group":负责功能的剧本编写

而不是"admin_function_group":负责管理用户

所以,解决此问题的根本逻辑,需要去:

找到当前用户的,所属的,唯一的,类型为script_function_group的group,且current user的name和owner的name一样才可以。

不过后来发现,其实最开始在登录后,已经获取到了current user的一系列的信息,包括

(除了此处functionGroupNames,functionGroupOwners,functionGroupIDs之外的)

current_user_function_group

而其中的function为"script_function_group",就是我们要的

然后再去看看:

【已解决】Reactjs中如何使用浏览器的localStorage或sessionStorage保存json即dict字典对象的值

转载请注明:在路上 » 【已解决】内容管理系统的统计列表中只列当前组的用户

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.201 seconds, using 22.16MB memory