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); } }
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>")); } }
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); }
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)); } } } }
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)); } } } } }
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; } }