我无法使用CSOM为文件或文件夹分配组和权限 [英] I am Unable to Assign group and permissions to file or folder using CSOM

查看:98
本文介绍了我无法使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆