예제 #1
0
        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);
            }
        }
예제 #2
0
 public static bool Exists(this SPGroupCollection groups, string groupName)
 {
     return(groups.GetByName(groupName) != null);
 }