如何判断 Principal Id 是权限组还是单个用户?

How to tell if a Principal Id is a permission group or a single user?

我正在使用 pnpJS 列出对 SPO 项目具有权限的所有用户:

 var info = await sp.web.lists.getByTitle('MyList').items.getById(theId2).roleAssignments();
    console.log(info, 'info');
var info2 = await sp.web.lists.getByTitle('MyList').roleAssignments.getById(3).groups();
    console.log(info2, 'groups');
    var newArr = info.map(a => a.PrincipalId);
    console.log(newArr, 'newArr');
    const res = newArr.forEach(async el => {
       await sp.web.siteUsers.getById(el).get().then(u => {
        console.log(u.Title);
      });
    });

我正在获取用户列表,但如果有一个组分配给了 SPO 项目,则会引发错误。我需要推断什么是组,什么是用户,这样我就可以阻止 foreach 包含组,从而消除错误。

对于 newArr 日志,我得到:

我知道 Principal Id 3 是一个组。我希望 foreach 忽略它 returns 的任何组。成功地做到这一点将停止我得到的错误。 我意识到 roleAssigments 可能正在寻找用户而不是组,这会导致错误。但是我如何列出与该项目关联的任何组?

更新(其他人的工作代码):

const userIds = [];
    const userNames = [];
    const res = newArr.forEach(async el => {
      // console.log(el, 'el');
      try {
        await sp.web.siteUsers.getById(el).get().then(u => {
           console.log(u.Title);
           userNames.push(u.Title);
           userIds.push(el);
         });
       } catch (err) {
         console.error("looks like it wasn't user after all");
       }

     });
   this.setState({
     userIds: userIds,
     userNames: userNames
    },() => {
      console.log(this.state.userIds, 'userIds');
      console.log(this.state.userNames, 'userNames');
    });
 console.log("userIds: ", userIds); // see if you get your "good" ids here
 // vs
 console.log("user and group ids:", newArr);

查看 info 数据,它似乎没有提供任何区别。

处理这些数据的潜在方法是添加 try / catch 块并继续执行您需要的任何功能,并在循环时获取实际用户列表。

// 确实感觉很乱,但看看它是否有帮助

 var info = await sp.web.lists.getByTitle('MyList').items.getById(theId2).roleAssignments();
    var newArr = info.map(a => a.PrincipalId);
    const userIds = []; // store collection of user ids that are not groups
    newArr.forEach(async el => {
      try {
       await sp.web.siteUsers.getById(el).get().then(u => {
          console.log(u.Title);
          userIds.push(el); // OR store actual user you get in response
        });
      } catch (err) {
        console.error("looks like it wasn't user after all", err);
      }
    });

console.log("userIds: ", userIds); // see if you get your "good" ids here
// vs
console.log("user and group ids:", newArr);