如何用TypeScript结合sp-pnp-node移除SharePoint文件夹用户直接访问权限
嘿,刚好我之前用PnP处理过类似的场景,你已经能分配权限的话,移除其实就是找到对应的角色分配然后删除就行。下面给你具体的步骤和代码示例:
首先要明确:用户的单独权限在SharePoint里是通过RoleAssignment对象来管理的,我们需要定位到文件夹下对应该用户的RoleAssignment,然后调用删除方法。
具体实现步骤
- 先获取目标文件夹的PnP实例
- 加载该文件夹的所有RoleAssignments
- 遍历找到匹配目标用户的RoleAssignment(通过用户的LoginName或者ID)
- 调用
delete()方法移除该权限
TypeScript代码示例
import { sp } from "@pnp/sp"; import { IRoleAssignment } from "@pnp/sp/security"; // 定义移除权限的函数 async function removeFolderDirectPermission(folderRelativeUrl: string, userLoginName: string): Promise<void> { try { // 获取目标文件夹对象 const folder = sp.web.getFolderByServerRelativeUrl(folderRelativeUrl); // 获取文件夹的所有角色分配 const roleAssignments = await folder.roleAssignments.get(); // 遍历找到对应用户的角色分配 const targetAssignment = roleAssignments.find((ra: IRoleAssignment) => ra.Member.LoginName === userLoginName); if (!targetAssignment) { console.log(`用户 ${userLoginName} 没有该文件夹的单独权限`); return; } // 删除对应的角色分配 await folder.roleAssignments.getById(targetAssignment.Id).delete(); console.log(`已成功移除用户 ${userLoginName} 对文件夹 ${folderRelativeUrl} 的直接权限`); } catch (error) { console.error("移除权限时出错:", error); throw error; } } // 调用示例(替换成你的实际路径和用户登录名) removeFolderDirectPermission("/sites/YourSite/Shared Documents/TargetFolder", "i:0#.f|membership|user@domain.com") .catch(err => console.error(err));
关键说明
- 用户LoginName格式:注意用户的LoginName通常是
i:0#.f|membership|user@domain.com这种格式,你可以通过sp.web.siteUsers.getByEmail("user@domain.com")先获取用户的详细信息,拿到正确的LoginName或者ID。 - 权限检查:当前操作的账号需要有管理列表权限或者更高的权限(比如网站集管理员)才能删除他人的权限。
- 继承状态:如果文件夹还继承父级权限,那用户的权限可能来自父级,这种情况你需要先断开继承(
folder.breakRoleInheritance(true),true表示保留现有权限),再删除单独添加的权限,但你说用户是单独权限,应该已经断开继承了。
内容的提问来源于stack exchange,提问作者Tania López
相关产品推荐
相关产品推荐

