已有一个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字典对象的值
转载请注明:在路上 » 【已解决】内容管理系统的统计列表中只列当前组的用户