private void AssignSsrsRole(SPGroupCollection groups, SPList userList, Role role, string spRole) { string errors = string.Empty; var reportViewers = groups.GetByName(spRole); try { foreach (SPUser user in reportViewers.Users) { try { var extendedList = userList.Items.GetItemById(user.ID); if ((extendedList["Synchronized"] == null || Convert.ToBoolean(extendedList["Synchronized"]) == false) && user.Name != "System Account") { string loginName = user.LoginName; bool inheritParent; var policies = client.GetPolicies($"/{siteCollectionId.ToString()}", out inheritParent).ToList(); loginName = SPClaimProviderManager.Local.DecodeClaim(loginName).Value; var existingRole = policies.SingleOrDefault(x => x.GroupUserName.ToLower() == loginName.ToLower()); if (existingRole == null) { policies.Add(new Policy { GroupUserName = loginName.Split('\\').Last(), Roles = new Role[] { role } }); } else { var roleList = existingRole.Roles.ToList(); roleList.Clear(); roleList.Add(role); existingRole.Roles = roleList.ToArray(); } client.SetPolicies($"/{siteCollectionId.ToString()}", policies.ToArray()); extendedList["Synchronized"] = true; extendedList.SystemUpdate(); } } catch (Exception exception) { errors += exception.ToString(); } } } catch (Exception exception) { errors += exception.ToString(); } if (!string.IsNullOrEmpty(errors)) { throw new Exception(errors); } }
public static bool Exists(this SPGroupCollection groups, string groupName) { return(groups.GetByName(groupName) != null); }