microsoft-graph-api - 是否有任何有效的方法来查询列表下的唯一权限列表项(图形或 CSOM)?
问题描述
我们有业务请求跨多个OneDrive for Business扫描用户权限,请问有没有一种高效的方法可以查询列表下的唯一权限列表项,而不需要一一查询列表项?如果是,如果项目没有唯一权限,这将减少对 SharePoint Online 的未使用请求。
谢谢你。
长
解决方案
现在 Graph 中没有直接这样的 API。但是您可以尝试权限API,然后尝试一些过滤器。
对于 CSOM:
using (var ctx = new ClientContext(sitrUrl))
{
//ctx.Credentials = Your Credentials
ctx.Load(ctx.Web, a => a.Lists);
ctx.ExecuteQuery();
List list = ctx.Web.Lists.GetByTitle("Documents");
var listItems = list.GetItems(CamlQuery.CreateAllItemsQuery());
//load all list items with default properties and HasUniqueRoleAssignments property
ctx.Load(listItems, a => a.IncludeWithDefaultProperties(b => b.HasUniqueRoleAssignments));
ctx.ExecuteQuery();
foreach (var item in listItems)
{
Console.WriteLine("List item: " + item["FileRef"].ToString());
if (item.HasUniqueRoleAssignments)
{
//load permissions if item has unique permission
ctx.Load(item, a => a.RoleAssignments.Include(roleAsg => roleAsg.Member.LoginName,
roleAsg => roleAsg.RoleDefinitionBindings.Include(roleDef => roleDef.Name,
roleDef => roleDef.Description)));
ctx.ExecuteQuery();
foreach (var roleAsg in item.RoleAssignments)
{
Console.WriteLine("User/Group: " + roleAsg.Member.LoginName);
List<string> roles = new List<string>();
foreach (var role in roleAsg.RoleDefinitionBindings)
{
roles.Add(role.Description);
}
Console.WriteLine("Permissions: " + string.Join(",", roles.ToArray()));
Console.WriteLine("----------------");
}
}
else
{
Console.WriteLine("No unique permission found");
}
Console.WriteLine("###############");
}
}
https://www.morgantechspace.com/2017/09/get-item-level-permissions-sharepoint-csom.html
或者
public static void HasUniquePermission()
{
OfficeDevPnP.Core.AuthenticationManager authMgr = new OfficeDevPnP.Core.AuthenticationManager();
string siteUrl = "https://******.sharepoint.com/sites/DeveloperSite/";
string userName = "Sathish@********.onmicrosoft.com";
string password = "********";
using (var ctx = authMgr.GetSharePointOnlineAuthenticatedContextTenant(siteUrl, userName, password))
{
Web web = ctx.Web;
ctx.Load(web.Lists);
ctx.Load(web);
ctx.ExecuteQueryRetry();
List list = web.Lists.GetByTitle("D1");
ctx.Load(list);
ctx.Load(list, li => li.HasUniqueRoleAssignments);
ctx.ExecuteQuery();
System.Console.WriteLine(Convert.ToString(list.HasUniqueRoleAssignments));
}
}
推荐阅读
- youtube - YouTube 数据 API 为没有频道的用户返回频道
- bash - 在 Jenkinsfile 中,如何访问在 sh 步骤中声明的变量?
- python - 如何解决 Python TypeError:“只能将整数标量数组转换为标量索引”
- typescript - 在 vue + typescript 应用程序中使用 okta 对用户进行身份验证 - 成功登录但用户从未经过身份验证
- html - 当我设置根页面时,我的菜单按钮隐藏在 ionic 3 中
- javascript - 如何使用javascript实现ios safari浏览器的打开相机和放大/缩小功能
- algorithm - 是否有任何有效的算法可以找到无向图中最长循环的长度?
- reactjs - 关于防止对 react/redux 进行不必要的重新渲染的思想实验反馈
- amazon-web-services - 运行 AWS Redshift/获取/保留它的快照是否在内部运行 EC2 实例?
- ios - AppCenter 构建错误“配置文件不包括签名证书苹果推送服务”