Esempio n. 1
0
        internal static void VerifyPermissions(List <string> groups, string url)
        {
            //string currUserName = SPContext.Current.Web.CurrentUser.LoginName;
            //string url = SPContext.Current.Site.Url;
            try
            {
                /*SPSecurity.RunWithElevatedPrivileges(delegate ()
                 * {*/

                SPClaimProviderManager cpm = SPClaimProviderManager.Local;
                SPClaim userClaim          = cpm.ConvertIdentifierToClaim(defaultUser, SPIdentifierTypes.WindowsSamAccountName);

                using (SPSite s = new SPSite(url))
                {
                    using (SPWeb w = s.RootWeb)
                    {
                        w.AllowUnsafeUpdates = true;
                        List <string>  missingGroups;
                        List <SPGroup> spgroups = PermutationGroups(groups, w, out missingGroups);
                        if (spgroups.Count != groups.Count)
                        {
                            SPUser admin = w.EnsureUser(userClaim.ToEncodedString());
                            CreateMissingGroups(missingGroups, w, admin);
                        }
                        w.AllowUnsafeUpdates = false;
                    }
                }
                //});
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error:\n" + ex.Message + "\n" + ex.StackTrace + "\n" + ex.InnerException);
            }
        }
Esempio n. 2
0
        internal void VerifyPermissions(List <string> permutations)
        {
            string currUserName = SPContext.Current.Web.CurrentUser.LoginName;
            string url          = SPContext.Current.Site.Url;

            try
            {
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    // need to convert to claim due to us running against claims enabled web app
                    SPClaimProviderManager cpm = SPClaimProviderManager.Local;
                    SPClaim adminClaim         = cpm.ConvertIdentifierToClaim(defaultUser, SPIdentifierTypes.WindowsSamAccountName);

                    using (SPSite s = new SPSite(url))
                    {
                        using (SPWeb w = s.RootWeb)
                        {
                            w.AllowUnsafeUpdates = true;
                            UpdateUserInformationList(w, GetClaimsForUser(true));
                            List <string> missingGroups;
                            List <SPGroup> groups = PermutationGroups(permutations, w, out missingGroups);
                            if (groups.Count != permutations.Count)
                            {
                                SPUser admin = w.EnsureUser(adminClaim.ToEncodedString());
                                groups.AddRange(CreateMissingGroups(missingGroups, w, admin));
                            }
                            SPUser cUser            = w.EnsureUser(currUserName);
                            SPGroupCollection gUser = cUser.Groups;
                            foreach (SPGroup g in groups)
                            {
                                bool isAlreadyMember = false;
                                foreach (SPGroup gu in gUser)
                                {
                                    if (gu.Name == g.Name)
                                    {
                                        isAlreadyMember = true;
                                        break;
                                    }
                                }
                                if (!isAlreadyMember)
                                {
                                    g.AddUser(cUser);
#if DEBUG
                                    this.Controls.Add(new LiteralControl("<div>Adding user to group:" + g.Name + "</div>"));
#endif
                                }
#if DEBUG
                                this.Controls.Add(new LiteralControl("<div>Already a member of group: " + g.Name + "</div>"));
#endif
                            }
                            w.AllowUnsafeUpdates = false;
                        }
                    }
                });
            }
            catch (Exception ex)
            {
                this.Controls.Add(new LiteralControl("<div class='Error' style='display:none'>" + ex.Message + "</div><div>" + ex.StackTrace + "</div>"));
            }
        }
Esempio n. 3
0
        private bool UpdateUserPermissions(SPWeb web, SPRoleAssignmentCollection roleAssignments, XmlNodeList principalUserNodes)
        {
            bool dirty = false;

            foreach (XmlNode principalUserNode in principalUserNodes)
            {
                string loginName = principalUserNode.Attributes["login"].Value;
                string userName  = principalUserNode.Attributes["name"].Value;
                try
                {
                    SPClaimProviderManager cpm = SPClaimProviderManager.Local;
                    SPClaim userClaim          = cpm.ConvertIdentifierToClaim(loginName, SPIdentifierTypes.WindowsSamAccountName);

                    SPUser user = web.EnsureUser(userClaim.ToEncodedString());
                    if (user == null)
                    {
                        throw new Exception();
                    }

                    SPPrincipal userPrincipal = (SPPrincipal)user;

                    try
                    {
                        SPRoleAssignment roleAssignment = roleAssignments.GetAssignmentByPrincipal(userPrincipal);
                        if (roleAssignment == null)
                        {
                            throw new Exception();
                        }

                        UpdatePrincipal(web, principalUserNode,
                                        string.Format("{0,20}, '{1,15}'", userName, loginName),
                                        roleAssignment);
                    }
                    catch
                    {
                        output.Append(string.Format("permissins missing for user: {0,20} with login: {1,15}, adding new..." + Environment.NewLine, userName, loginName));
                        SPRoleAssignment roleAssignmentNew = new SPRoleAssignment(userPrincipal);
                        XmlNodeList      roleNodes         = principalUserNode.SelectNodes("role");
                        foreach (XmlNode roleNode in roleNodes)
                        {
                            string roleName = roleNode.Attributes["name"].Value;
                            if (roleName.ToLower().Equals("limited access"))
                            {
                                roleName = "Limited User";
                            }

                            SPRoleDefinition role = web.RoleDefinitions[roleName];
                            roleAssignmentNew.RoleDefinitionBindings.Add(role);
                        }
                        roleAssignments.Add(roleAssignmentNew);
                        output.Append("completed" + Environment.NewLine);
                        dirty = true;
                    }
                }
                catch { output.Append(string.Format("user not found: {0,20} with login: {1,15}" + Environment.NewLine, userName, loginName)); }
            }

            return(dirty);
        }
Esempio n. 4
0
        private void CheckItems(XmlNode siteNode, string url)
        {
            using (SPWeb web = new SPSite(url).OpenWeb())
            {
                XmlNodeList alertNodes = siteNode.SelectNodes("alert[@type='Item']");
                foreach (XmlNode alertNode in alertNodes)
                {
                    string alertTitle = alertNode.Attributes["title"].Value;
                    string listTitle  = alertNode.Attributes["list"].Value;
                    string loginName  = alertNode.Attributes["user"].Value;
                    int    itemId     = Int32.Parse(alertNode.Attributes["id"].Value);
                    string itemUrl    = alertNode.Attributes["url"].Value;
                    string objectType = alertNode.Attributes["object"].Value;

                    output.Append(string.Format("user: {0,20}...", loginName));
                    try
                    {
                        SPList list = web.Lists[listTitle];
                        SPClaimProviderManager cpm = SPClaimProviderManager.Local;
                        SPClaim userClaim          = cpm.ConvertIdentifierToClaim(loginName, SPIdentifierTypes.WindowsSamAccountName);
                        SPUser  user = web.EnsureUser(userClaim.ToEncodedString());

                        string      eventType   = alertNode.Attributes["event"].Value;
                        SPEventType spEventType = (SPEventType)Enum.Parse(typeof(SPEventType), eventType);

                        string           eventFrequency   = alertNode.Attributes["frequency"].Value;
                        SPAlertFrequency spAlertFrequency = (SPAlertFrequency)Enum.Parse(typeof(SPAlertFrequency), eventFrequency);

                        string      type        = alertNode.Attributes["type"].Value;
                        SPAlertType spAlertType = (SPAlertType)Enum.Parse(typeof(SPAlertType), type);

                        SPListItem item = null;
                        if (list.BaseType == SPBaseType.DocumentLibrary)
                        {
                            SPFile file = web.GetFile(itemUrl);
                            item = file.Item;
                        }
                        else
                        {
                            item = list.GetItemById(itemId);
                        }

                        SPAlert newAlert = user.Alerts.Add();

                        newAlert.Title            = alertTitle;
                        newAlert.AlertType        = spAlertType;
                        newAlert.Item             = item;
                        newAlert.DeliveryChannels = SPAlertDeliveryChannels.Email;
                        newAlert.EventType        = spEventType;
                        newAlert.AlertFrequency   = spAlertFrequency;
                        newAlert.Status           = SPAlertStatus.On;
                        newAlert.Update(false);
                        output.Append(string.Format("Complete" + Environment.NewLine));
                    }
                    catch (Exception ex) { output.Append(string.Format("error: {0,20}" + Environment.NewLine, ex.Message)); }
                }
            }
        }
Esempio n. 5
0
        private void CheckLists(XmlNode siteNode, string url)
        {
            using (SPWeb web = new SPSite(url).OpenWeb())
            {
                XmlNodeList alertNodes = siteNode.SelectNodes("alert[@type='List']");
                foreach (XmlNode alertNode in alertNodes)
                {
                    string alertTitle = alertNode.Attributes["title"].Value;
                    string listTitle  = alertNode.Attributes["list"].Value;
                    string loginName  = alertNode.Attributes["user"].Value;
                    string objectType = alertNode.Attributes["object"].Value;
                    bool   isFolder   = objectType.ToLower().Equals("folder");

                    if (!isFolder)
                    {
                        output.Append(string.Format("user: {0,20}...", loginName));
                        try
                        {
                            SPList list = web.Lists[listTitle];
                            SPClaimProviderManager cpm = SPClaimProviderManager.Local;
                            SPClaim userClaim          = cpm.ConvertIdentifierToClaim(loginName, SPIdentifierTypes.WindowsSamAccountName);
                            SPUser  user = web.EnsureUser(userClaim.ToEncodedString());

                            string      eventType   = alertNode.Attributes["event"].Value;
                            SPEventType spEventType = (SPEventType)Enum.Parse(typeof(SPEventType), eventType);

                            string           eventFrequency   = alertNode.Attributes["frequency"].Value;
                            SPAlertFrequency spAlertFrequency = (SPAlertFrequency)Enum.Parse(typeof(SPAlertFrequency), eventFrequency);

                            string      type        = alertNode.Attributes["type"].Value;
                            SPAlertType spAlertType = (SPAlertType)Enum.Parse(typeof(SPAlertType), type);

                            SPAlert newAlert = user.Alerts.Add();
                            newAlert.Title            = alertTitle;
                            newAlert.AlertType        = spAlertType;
                            newAlert.List             = list;
                            newAlert.DeliveryChannels = SPAlertDeliveryChannels.Email;
                            newAlert.EventType        = spEventType;
                            newAlert.AlertFrequency   = spAlertFrequency;
                            newAlert.Status           = SPAlertStatus.On;
                            newAlert.Update(false);
                            output.Append(string.Format("Complete" + Environment.NewLine));
                        }
                        catch (Exception ex) { output.Append(string.Format("error: {0,20}" + Environment.NewLine, ex.Message)); }
                    }
                }
            }
        }
Esempio n. 6
0
        private void RemoveAlerts(XmlNode siteNode, string url)
        {
            using (SPWeb web = new SPSite(url).OpenWeb())
            {
                SPClaimProviderManager cpm = SPClaimProviderManager.Local;
                SPClaim userClaim          = cpm.ConvertIdentifierToClaim("emirates\\s717981", SPIdentifierTypes.WindowsSamAccountName);
                SPUser  tempUser           = web.EnsureUser(userClaim.ToEncodedString());

                web.AllowUnsafeUpdates = true;
                try
                {
                    SPAlertCollection allAlerts = web.Alerts;

                    List <Guid> alertsToDelete = new List <Guid>();

                    foreach (SPAlert spAlert in allAlerts)
                    {
                        alertsToDelete.Add(spAlert.ID);
                    }

                    Guid [] alerts = alertsToDelete.ToArray();
                    for (int i = 0; i < alerts.Length; i++)
                    {
                        SPAlert alert = allAlerts[alerts[i]];
                        alert.User   = tempUser;
                        alert.Status = SPAlertStatus.Off;
                        alert.Update();
                    }

                    foreach (Guid alertGuid in alertsToDelete)
                    {
                        allAlerts.Delete(alertGuid);
                    }

                    web.Update();
                }
                catch (Exception ex) { Console.WriteLine(ex.Message); }
                web.AllowUnsafeUpdates = false;
            }
        }