我无法使用CSOM为文件或文件夹分配组和权限 [英] I am Unable to Assign group and permissions to file or folder using CSOM
本文介绍了我无法使用CSOM为文件或文件夹分配组和权限的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
每次发生异常时"无法添加角色分配with empty role definition binding collection" ,我尝试了其他
来源仍然面临同样问题的所有解决方案..请帮助..我的代码如下
internal bool AssignPermission(ClientContext p_Context,SPList MicrosoftDestinationList,Folder DestinationFolder,File DestinationFile,ConcurrentBag< SPRoleDefinations> p_Permissions)
&NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; string f_UserName &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; = null;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; string f_GrpName &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; = null;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; bool f_Flag &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; = false;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP;校长f_Principal &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; = null;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; RoleDefinition f_RoleDef &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; = null;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; RDBCollection roleDefBindCol &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; = null;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; RACollection ItemRoleAssignCollection &NBSP; = null;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP;列表与LT; RoleDefinition> SiteRoleDefinationCollection&NBSP; &NBSP; &NBSP; = null;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP;列表与LT;串GT;在UserList&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; = null;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; bool f_SameContext &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; = false;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP;试试
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; #region检查客户背景
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; // CSOM需要来自同一客户端上下文的对象
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; //检查Group / Users的客户上下文是否与
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; //当前客户端上下文。如果两者都是相同的用户当前客户
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; //上下文其他人再次获得用户/组。
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(m_WebGroups.Count> 0)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(m_WebGroups.ElementAt(0).Context.TraceCorrelationId == p_Context.TraceCorrelationId)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; f_SameContext = true;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;否则if(m_WebUsers.Count> 0)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(m_WebUsers.ElementAt(0).Context.TraceCorrelationId == p_Context.TraceCorrelationId)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; f_SameContext = true;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(!f_SameContext)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; UserList = GetUsers(p_Context);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; #endregion
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;试试
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(p_Context.HasPendingRequest)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; p_Context.ExecuteQuery();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; catch(例外){}
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(MicrosoftDestinationList!= null)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; ItemRoleAssignCollection = MicrosoftDestinationList.RoleAssignments; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(DestinationFile!= null)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; ItemRoleAssignCollection = DestinationFile.ListItemAllFields.RoleAssignments;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;否则
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(DestinationFolder!= null)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; ItemRoleAssignCollection = DestinationFolder.ListItemAllFields.RoleAssignments;
$
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; //p_Context.Load(p_SpDestList.RoleAssignments);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; //p_Context.ExecuteQuery();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; SiteRoleDefinationCollection = m_WebRoleDefinations [p_Context.Web.Url];
$
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; foreach(p_Permissions中的SPRoleDefinations f_RoleDefObj)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;试试
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; bool f_RoleAdeed = false;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; /// m_WebRoleDefinations包含网站及其角色定义
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; roleDefBindCol&NBSP; = new RDBCollection(p_Context);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; foreach(f_RoleDefObj.m_Roles中的SPROle f_Role)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;试试
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; //默认情况下提供限制访问角色
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(f_Role.m_Name ==" Limited Access")
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;继续;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; RoleType f_RoleType = RoleType.None;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; ///检查网站是否存在rolekind
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(Enum.TryParse(f_Role.m_RoleKind,out f_RoleType))
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(null!= SiteRoleDefinationCollection.Where(rd => rd.RoleTypeKind == f_RoleType).FirstOrDefault())
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; var roledef = p_Context.Web.RoleDefinitions.GetByType(f_RoleType);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; p_Context.Load(roledef);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; p_Context.ExecuteQuery();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; //roleDefBindCol.Add(p_Context.Web.RoleDefinitions。
// GetByType(f_RoleType));
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; roleDefBindCol.Add(roledef);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; f_RoleAdeed = true;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;否则
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; ///如果找不到角色,请创建新角色并添加到网站权限中$
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; f_RoleDef = CreateNewRoleDefination(p_Context,f_Role);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(f_RoleDef!= null)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; roleDefBindCol.Add(f_RoleDef);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; f_RoleAdeed = true;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(MicrosoftDestinationList!= null)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; MicrosoftDestinationList.BreakRoleInheritance(true,false); &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(DestinationFile!= null)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; DestinationFile.ListItemAllFields.BreakRoleInheritance(true,false);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;否则
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(DestinationFolder!= null)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; DestinationFolder.ListItemAllFields.BreakRoleInheritance(true,false);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; p_Context.ExecuteQuery();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; catch(例外情况)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {CommonClass.ExLogger.LogError(ClassName," AssignPermission :: Log 1 ::",ex); }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(!f_RoleAdeed)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;继续;
$
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; ///获取用户或组并添加到RoleAssignmentCollection &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; f_Principal = null;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(!f_RoleDefObj.m_Isgroup)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;继续;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; // f_UserName&NBSP; &NBSP; =&NBSP; f_RoleDefObj.m_Members.Select(member =>
// member.m_EmailID).First() ;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; // f_UserName&NBSP; &NBSP; =&NBSP; CommonClass.UserMappings [f_UserName];
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; // f_Principal&NBSP; =&NBSP; m_WebUsers.Where(usr =>
// ((User)usr).Email.ToLower()==
// f_UserName.ToLower())。First();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;否则
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(CommonClass.UserMappings.Keys.Contains(f_RoleDefObj.m_SpGroupName))
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; f_GrpName = CommonClass.UserMappings [f_RoleDefObj.m_SpGroupName];
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; f_Principal = m_WebGroups.Where(grp => grp.Title.ToLower()== f_GrpName.ToLower())。First();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; p_Context.Load(f_Principal);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; p_Context.ExecuteQuery();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; // SecurableObject securable = p_Context.Web.Lists.GetByTitle(DestinationFolder.Name)。GetItemByUniqueId(DestinationFile.UniqueId);
$
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; //securable.BreakRoleInheritance(true,false);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; // f_roleAssignCollection = DestinationFile.ListItemAllFields.RoleAssignments;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; // RoleAssignment rollassign = f_roleAssignCollection.Add(f_Principal,roleDefBindCol);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; ItemRoleAssignCollection.Add(f_Principal,roleDefBindCol);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; p_Context.Load(ItemRoleAssignCollection);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(MicrosoftDestinationList!= null)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; MicrosoftDestinationList.Update();
$
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(DestinationFile!= null)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; DestinationFile.Update();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;否则
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(DestinationFolder!= null)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; DestinationFolder.Update();
$
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; p_Context.ExecuteQuery();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; f_Flag = true;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; //f_roleAssignCollection.Add(f_Principal,bemphipDefBindCol);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; catch(例外情况)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {CommonClass.ExLogger.LogError(ClassName," AssignPermission :: Log 2 ::",ex); }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; //p_Context.Load(f_roleAssignCollection);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; //p_Context.ExecuteQuery();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; catch(例外情况)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {CommonClass.ExLogger.LogError(ClassName," AssignPermission",ex); }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; return f_Flag;
&NBSP; &NBSP; &NBSP; }
解决方案
您好
以下链接供您参考。
https://stackoverflow.com/questions/50481642/csom-give-edit-permissions-to-group-on-sharepoint-list
everytime exception occures "Cannot add a role assignment with empty role definition binding collection " , I tried all the solution from other sources still facing same issue..please help.. my code is as below
internal bool AssignPermission(ClientContext p_Context ,SPList MicrosoftDestinationList, Folder DestinationFolder,File DestinationFile,ConcurrentBag<SPRoleDefinations> p_Permissions ){
string f_UserName = null;
string f_GrpName = null;
bool f_Flag = false;
Principal f_Principal = null;
RoleDefinition f_RoleDef = null;
RDBCollection roleDefBindCol = null;
RACollection ItemRoleAssignCollection = null;
List<RoleDefinition> SiteRoleDefinationCollection = null;
List<string> UserList = null;
bool f_SameContext = false;
try
{
#region CHECK CLIENT CONTEXT
//CSOM need objects from same client context
//Check if client context of the Group/Users is same as the
//current client context. If both are same user current client
//context else get User/Groups again.
if (m_WebGroups.Count > 0)
{
if (m_WebGroups.ElementAt(0).Context.TraceCorrelationId ==p_Context.TraceCorrelationId)
f_SameContext = true;
}
else if (m_WebUsers.Count > 0)
{
if (m_WebUsers.ElementAt(0).Context.TraceCorrelationId ==p_Context.TraceCorrelationId)
f_SameContext = true;
}
if(!f_SameContext)
UserList = GetUsers(p_Context);
#endregion
try
{
if (p_Context.HasPendingRequest)
p_Context.ExecuteQuery();
}
catch (Exception){}
if(MicrosoftDestinationList!=null)
ItemRoleAssignCollection = MicrosoftDestinationList.RoleAssignments;
if (DestinationFile != null)
ItemRoleAssignCollection = DestinationFile.ListItemAllFields.RoleAssignments;
else
if (DestinationFolder != null)
ItemRoleAssignCollection = DestinationFolder.ListItemAllFields.RoleAssignments;
//p_Context.Load(p_SpDestList.RoleAssignments);
//p_Context.ExecuteQuery();
SiteRoleDefinationCollection = m_WebRoleDefinations[p_Context.Web.Url];
foreach (SPRoleDefinations f_RoleDefObj in p_Permissions)
{
try
{
bool f_RoleAdeed = false;
/// m_WebRoleDefinations contains site and its Role Definations
roleDefBindCol = new RDBCollection(p_Context);
foreach (SPROle f_Role in f_RoleDefObj.m_Roles)
{
try
{
// Limited access role is provided by default
if (f_Role.m_Name == "Limited Access")
continue;
RoleType f_RoleType = RoleType.None;
///Check if rolekind is present for the website
if (Enum.TryParse(f_Role.m_RoleKind, out f_RoleType))
{
if (null != SiteRoleDefinationCollection.Where(rd => rd.RoleTypeKind == f_RoleType).FirstOrDefault())
{
var roledef = p_Context.Web.RoleDefinitions.GetByType(f_RoleType);
p_Context.Load(roledef);
p_Context.ExecuteQuery();
//roleDefBindCol.Add(p_Context.Web.RoleDefinitions.
// GetByType(f_RoleType));
roleDefBindCol.Add(roledef);
f_RoleAdeed = true;
}
else
{
/// If role is not found create new role and add to website permissions
f_RoleDef = CreateNewRoleDefination(p_Context, f_Role);
if(f_RoleDef!=null)
roleDefBindCol.Add(f_RoleDef);
f_RoleAdeed = true;
}
if(MicrosoftDestinationList!=null)
MicrosoftDestinationList.BreakRoleInheritance(true, false);
if (DestinationFile != null)
DestinationFile.ListItemAllFields.BreakRoleInheritance(true, false);
else
if (DestinationFolder != null)
DestinationFolder.ListItemAllFields.BreakRoleInheritance(true, false);
p_Context.ExecuteQuery();
}
}
catch (Exception ex)
{ CommonClass.ExLogger.LogError(ClassName, "AssignPermission:: Log 1 :: ", ex); }
}
if (!f_RoleAdeed)
continue;
/// Get user or group and add to RoleAssignmentCollection
f_Principal = null;
if (!f_RoleDefObj.m_Isgroup)
{
continue;
//f_UserName = f_RoleDefObj.m_Members.Select(member =>
// member.m_EmailID).First();
//f_UserName = CommonClass.UserMappings[f_UserName];
//f_Principal = m_WebUsers.Where(usr =>
// ((User)usr).Email.ToLower() ==
// f_UserName.ToLower()).First();
}
else
{
if (CommonClass.UserMappings.Keys.Contains(f_RoleDefObj.m_SpGroupName))
{
f_GrpName = CommonClass.UserMappings[f_RoleDefObj.m_SpGroupName];
f_Principal = m_WebGroups.Where(grp =>grp.Title.ToLower() ==f_GrpName.ToLower()).First();
p_Context.Load(f_Principal);
p_Context.ExecuteQuery();
//SecurableObject securable = p_Context.Web.Lists.GetByTitle(DestinationFolder.Name).GetItemByUniqueId(DestinationFile.UniqueId);
//securable.BreakRoleInheritance(true, false);
//f_roleAssignCollection = DestinationFile.ListItemAllFields.RoleAssignments;
//RoleAssignment rollassign= f_roleAssignCollection.Add(f_Principal, roleDefBindCol);
ItemRoleAssignCollection.Add(f_Principal, roleDefBindCol);
p_Context.Load(ItemRoleAssignCollection);
if (MicrosoftDestinationList != null)
MicrosoftDestinationList.Update();
if (DestinationFile != null)
DestinationFile.Update();
else
if (DestinationFolder != null)
DestinationFolder.Update();
p_Context.ExecuteQuery();
f_Flag = true;
}
}
//f_roleAssignCollection.Add(f_Principal, roleDefBindCol);
}
catch (Exception ex)
{ CommonClass.ExLogger.LogError(ClassName, "AssignPermission:: Log 2 :: ", ex); }
}
//p_Context.Load(f_roleAssignCollection);
//p_Context.ExecuteQuery();
}
catch (Exception ex)
{ CommonClass.ExLogger.LogError(ClassName, "AssignPermission", ex); }
return f_Flag;
}
解决方案
Hi
Below link for your reference.
https://stackoverflow.com/questions/50481642/csom-give-edit-permissions-to-group-on-sharepoint-list
这篇关于我无法使用CSOM为文件或文件夹分配组和权限的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文