/// <summary> /// Expects the "CreateDocumentStructure" method to be run first. /// </summary> private bool BreakPermissionInheritance() { // Create an instance of the Tree provider TreeProvider tree = new TreeProvider(CMSContext.CurrentUser); // Get default culture code string culture = SettingsKeyProvider.GetStringValue(CMSContext.CurrentSiteName + ".CMSDefaultCultureCode"); // Get the API Example document TreeNode node = tree.SelectSingleNode(CMSContext.CurrentSiteName, "/API-Example/API-Example-subpage", culture); if (node != null) { // Create an instance of ACL provider AclProvider acl = new AclProvider(tree); // Break permission inheritance (without copying parent permissions) bool copyParentPermissions = false; acl.BreakInherintance(node, copyParentPermissions); return(true); } return(false); }
protected void lnkBreakWithCopy_Click(Object sender, EventArgs e) { // Check permission CanModifyPermission(true); // Break permission inheritance and copy parent permissions AclProvider.BreakInherintance(Node, true); // Log staging task TaskParameters taskParam = new TaskParameters(); taskParam.SetParameter("copyPermissions", true); DocumentSynchronizationHelper.LogDocumentChange(Node, TaskTypeEnum.BreakACLInheritance, Node.TreeProvider, SynchronizationInfoProvider.ENABLED_SERVERS, taskParam, Node.TreeProvider.AllowAsyncActions); // Insert information about this event to eventlog. if (Tree.LogEvents) { EventLog.LogEvent(EventLogProvider.EVENT_TYPE_INFORMATION, DateTime.Now, "Content", "DOCPERMISSIONSMODIFIED", Tree.UserInfo.UserID, Tree.UserInfo.UserName, Node.NodeID, DocumentName, ipAddress, ResHelper.GetAPIString("security.documentpermissionsbreakcopy", "Inheritance of the parent document permissions have been broken. Parent document permissions have been copied."), Node.NodeSiteID, eventUrl); } lblInheritanceInfo.Text = GetString("Security.InheritsInfo.DoesNotInherit"); SwitchBackToPermissionsMode(); // Clear and reload securityElem.InvalidateAcls(); securityElem.LoadOperators(true); }
protected void lnkBreakWithClear_Click(Object sender, EventArgs e) { // Check permission CheckModifyPermission(true); // Break permission inheritance and clear permissions AclProvider.BreakInherintance(Node, false); // Log staging task and flush cache DocumentSynchronizationHelper.LogDocumentChange(Node, TaskTypeEnum.BreakACLInheritance, Node.TreeProvider, SynchronizationInfoProvider.ENABLED_SERVERS, null, Node.TreeProvider.AllowAsyncActions); CacheHelper.TouchKeys(TreeProvider.GetDependencyCacheKeys(Node, Node.NodeSiteName)); // Insert information about this event to event log. if (DocumentManager.Tree.LogEvents) { EventLog.LogEvent(EventLogProvider.EVENT_TYPE_INFORMATION, DateTime.Now, "Content", "DOCPERMISSIONSMODIFIED", currentUser.UserID, currentUser.UserName, Node.NodeID, DocumentName, ipAddress, ResHelper.GetAPIString("security.documentpermissionsbreakclear", "Inheritance of the parent document permissions have been broken."), Node.NodeSiteID, eventUrl); } lblInheritanceInfo.Text = GetString("Security.InheritsInfo.DoesNotInherit"); SwitchBackToPermissionsMode(); // Clear and reload securityElem.InvalidateAcls(); securityElem.LoadOperators(true); }
/// <summary> /// Expects the "CreateDocumentStructure" method to be run first. /// </summary> private bool DeletePermissions() { // Create an instance of the Tree provider TreeProvider tree = new TreeProvider(CMSContext.CurrentUser); // Get default culture code string culture = SettingsKeyProvider.GetStringValue(CMSContext.CurrentSiteName + ".CMSDefaultCultureCode"); // Get the API Example document TreeNode node = tree.SelectSingleNode(CMSContext.CurrentSiteName, "/API-Example", culture); if (node != null) { // Create an instance of ACL provider AclProvider acl = new AclProvider(tree); // Get ID of ACL used on API Example document int nodeACLID = ValidationHelper.GetInteger(node.GetValue("NodeACLID"), 0); // Delete all ACL items acl.ClearACLItems(nodeACLID); return(true); } return(false); }
/// <summary> /// Expects the "CreateDocumentStructure" method to be run first. /// </summary> private bool SetRolePermissions() { // Create an instance of the Tree provider TreeProvider tree = new TreeProvider(CMSContext.CurrentUser); // Get default culture code string culture = SettingsKeyProvider.GetStringValue(CMSContext.CurrentSiteName + ".CMSDefaultCultureCode"); // Get the API Example document TreeNode node = tree.SelectSingleNode(CMSContext.CurrentSiteName, "/API-Example", culture); if (node != null) { // Get the role ID RoleInfo role = RoleInfoProvider.GetRoleInfo("CMSEditor", CMSContext.CurrentSiteName); if (role != null) { // Prepare allowed / denied permissions int allowed = 0; int denied = 0; allowed += Convert.ToInt32(Math.Pow(2, Convert.ToInt32(NodePermissionsEnum.Modify))); // Create an instance of ACL provider AclProvider acl = new AclProvider(tree); // Set role permissions acl.SetRolePermissions(node, allowed, denied, role.RoleID); return(true); } } return(false); }
/// <summary> /// Load ACLItems for the selected document. /// </summary> private void LoadACLItems() { if (dsAclItems == null) { string where = GetWhereCondition(); dsAclItems = AclProvider.GetACLItems(Node.NodeID, where, "OperatorName, Operator", 0, "Operator,ACLOwnerNodeID,OperatorName,OperatorFullName,Allowed,Denied,RoleGroupID,RoleID,SiteID"); } }
/// <summary> /// Changes permission inheritance for documents filtered by permission 'Modify permissions' /// </summary> private bool FilterDataSet() { // Create an instance of the Tree provider TreeProvider tree = new TreeProvider(CMSContext.CurrentUser); // Set the parameters for getting documents string siteName = CMSContext.CurrentSiteName; string aliasPath = "/%"; string culture = SettingsKeyProvider.GetStringValue(CMSContext.CurrentSiteName + ".CMSDefaultCultureCode"); bool combineWithDefaultCulture = true; // Get data set with documents DataSet documents = tree.SelectNodes(siteName, aliasPath, culture, combineWithDefaultCulture); // Get the user UserInfo user = UserInfoProvider.GetUserInfo("CMSEditor"); if (user != null) { // Filter the data set by the user permissions TreeSecurityProvider.FilterDataSetByPermissions(documents, NodePermissionsEnum.ModifyPermissions, user); if (!DataHelper.DataSourceIsEmpty(documents)) { // Create an instance of ACL provider AclProvider acl = new AclProvider(tree); // Loop through filtered documents foreach (DataRow documentRow in documents.Tables[0].Rows) { // Create a new Tree node from the data row TreeNode node = TreeNode.New(documentRow, "CMS.MenuItem", tree); // Break permission inheritance (with copying parent permissions) acl.BreakInherintance(node, true); } // Data set filtered successfully - permission inheritance broken for filtered items apiFilterDataSet.InfoMessage = "Data set with all documents filtered successfully by permission 'Modify permissions' for user 'CMSEditor'. Permission inheritance broken for filtered items."; } else { // Data set filtered successfully - no items left in data set apiFilterDataSet.InfoMessage = "Data set with all documents filtered successfully by permission 'Modify permissions' for user 'CMSEditor'. No items left in data set."; } return(true); } return(false); }
/// <summary> /// Removes selected operator from the ACL. /// </summary> protected void btnRemoveOperator_Click(Object sender, EventArgs e) { // Check permission CheckPermissions(true); if (lstOperators.SelectedItem == null) { return; } string operatorName = lstOperators.SelectedItem.Text; string message = null; string operatorID = lstOperators.SelectedValue; if (operatorID.StartsWith("U")) { int userId = int.Parse(operatorID.Substring(1)); UserInfo ui = UserInfoProvider.GetUserInfo(userId); AclProvider.RemoveUser(Node.NodeID, ui); message = "security.documentuserpermissionremoved"; } else { AclProvider.RemoveRole(Node.NodeID, int.Parse(operatorID.Substring(1))); message = "security.documentrolepermissionremoved"; } // Log synchronization task and flush cache DocumentSynchronizationHelper.LogDocumentChange(TreeHelper.SelectSingleNode(Node.NodeID), TaskTypeEnum.UpdateDocument, Node.TreeProvider); CacheHelper.TouchKeys(TreeProvider.GetDependencyCacheKeys(Node, Node.NodeSiteName)); // Insert information about this event to eventlog. if (Tree.LogEvents) { EventLog.LogEvent(EventLogProvider.EVENT_TYPE_INFORMATION, DateTime.Now, "Content", "DOCPERMISSIONSMODIFIED", Tree.UserInfo.UserID, Tree.UserInfo.UserName, Node.NodeID, DocumentName, ipAddress, string.Format(ResHelper.GetAPIString(message, "Operator '{0}' has been removed from the document permissions."), operatorName), Node.NodeSiteID, eventUrl); } dsAclItems = null; LoadOperators(true); }
protected void usUsers_OnItemsSelected(object sender, EventArgs e) { AclProvider aclProv = null; // Create Acl provider to current treenode if (Node != null) { aclProv = new AclProvider(Tree); } // Remove old items string newValues = ValidationHelper.GetString(usUsers.Value, null); string items = DataHelper.GetNewItemsInList(newValues, CurrentValues); if (!String.IsNullOrEmpty(items)) { string[] newItems = items.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (newItems != null) { // Add all new items to site foreach (string item in newItems) { int userID = ValidationHelper.GetInteger(item, 0); if (BoardID > 0) { // Remove message board from board ModuleCommands.MessageBoardRemoveModeratorFromBoard(userID, BoardID); } else if (Node != null) { if (aclProv != null) { UserInfo ui = UserInfoProvider.GetUserInfo(userID); if (ui != null) { // Remove user from treenode aclProv.RemoveUser(NodeID, ui); } } } else if (ForumID > 0) { // Remove user from forum moderators ModuleCommands.ForumsRemoveForumModerator(userID, ForumID); } } } } // Add new items items = DataHelper.GetNewItemsInList(CurrentValues, newValues); if (!String.IsNullOrEmpty(items)) { string[] newItems = items.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (newItems != null) { // Add all new items to site foreach (string item in newItems) { int userID = ValidationHelper.GetInteger(item, 0); if (BoardID > 0) { // Add user to the message board ModuleCommands.MessageBoardAddModeratorToBoard(userID, BoardID); } else if (Node != null) { // Add user to treenode if (aclProv != null) { UserInfo ui = UserInfoProvider.GetUserInfo(userID); if (ui != null) { // Remove user from treenode aclProv.SetUserPermissions(Node, 0, 0, ui); } } } else if (ForumID > 0) { // Add user to the forum moderators ModuleCommands.ForumsAddForumModerator(userID, ForumID); } } } } // Log synchronization task if (Node != null) { DocumentSynchronizationHelper.LogDocumentChange(Node, TaskTypeEnum.UpdateDocument, Node.TreeProvider); } RaiseOnChanged(); }
/// <summary> /// Expects the "CreateDocumentStructure" method to be run first. /// </summary> private bool BreakPermissionInheritance() { // Create an instance of the Tree provider TreeProvider tree = new TreeProvider(CMSContext.CurrentUser); // Get default culture code string culture = SettingsKeyProvider.GetStringValue(CMSContext.CurrentSiteName + ".CMSDefaultCultureCode"); // Get the API Example document TreeNode node = tree.SelectSingleNode(CMSContext.CurrentSiteName, "/API-Example/API-Example-subpage", culture); if (node != null) { // Create an instance of ACL provider AclProvider acl = new AclProvider(tree); // Break permission inheritance (without copying parent permissions) bool copyParentPermissions = false; acl.BreakInherintance(node, copyParentPermissions); return true; } return false; }
/// <summary> /// Expects the "CreateDocumentStructure" method to be run first. /// </summary> private bool SetUserPermissions() { // Create an instance of the Tree provider TreeProvider tree = new TreeProvider(CMSContext.CurrentUser); // Get default culture code string culture = SettingsKeyProvider.GetStringValue(CMSContext.CurrentSiteName + ".CMSDefaultCultureCode"); // Get the API Example document TreeNode node = tree.SelectSingleNode(CMSContext.CurrentSiteName, "/API-Example", culture); if (node != null) { // Get the user UserInfo user = UserInfoProvider.GetUserInfo("Andy"); if (user != null) { // Prepare allowed / denied permissions int allowed = 0; int denied = 0; allowed += Convert.ToInt32(Math.Pow(2, Convert.ToInt32(NodePermissionsEnum.ModifyPermissions))); // Create an instance of ACL provider AclProvider acl = new AclProvider(tree); // Set user permissions acl.SetUserPermissions(node, allowed, denied, user); return true; } } return false; }
/// <summary> /// Changes permission inheritance for documents filtered by permission 'Modify permissions' /// </summary> private bool FilterDataSet() { // Create an instance of the Tree provider TreeProvider tree = new TreeProvider(CMSContext.CurrentUser); // Set the parameters for getting documents string siteName = CMSContext.CurrentSiteName; string aliasPath = "/%"; string culture = SettingsKeyProvider.GetStringValue(CMSContext.CurrentSiteName + ".CMSDefaultCultureCode"); bool combineWithDefaultCulture = true; // Get data set with documents DataSet documents = tree.SelectNodes(siteName, aliasPath, culture, combineWithDefaultCulture); // Get the user UserInfo user = UserInfoProvider.GetUserInfo("CMSEditor"); if (user != null) { // Filter the data set by the user permissions TreeSecurityProvider.FilterDataSetByPermissions(documents, NodePermissionsEnum.ModifyPermissions, user); if (!DataHelper.DataSourceIsEmpty(documents)) { // Create an instance of ACL provider AclProvider acl = new AclProvider(tree); // Loop through filtered documents foreach (DataRow documentRow in documents.Tables[0].Rows) { // Create a new Tree node from the data row TreeNode node = TreeNode.New(documentRow, "CMS.MenuItem", tree); // Break permission inheritance (with copying parent permissions) acl.BreakInherintance(node, true); } // Data set filtered successfully - permission inheritance broken for filtered items apiFilterDataSet.InfoMessage = "Data set with all documents filtered successfully by permission 'Modify permissions' for user 'CMSEditor'. Permission inheritance broken for filtered items."; } else { // Data set filtered successfully - no items left in data set apiFilterDataSet.InfoMessage = "Data set with all documents filtered successfully by permission 'Modify permissions' for user 'CMSEditor'. No items left in data set."; } return true; } return false; }
/// <summary> /// Expects the "CreateDocumentStructure" method to be run first. /// </summary> private bool DeletePermissions() { // Create an instance of the Tree provider TreeProvider tree = new TreeProvider(CMSContext.CurrentUser); // Get default culture code string culture = SettingsKeyProvider.GetStringValue(CMSContext.CurrentSiteName + ".CMSDefaultCultureCode"); // Get the API Example document TreeNode node = tree.SelectSingleNode(CMSContext.CurrentSiteName, "/API-Example", culture); if (node != null) { // Create an instance of ACL provider AclProvider acl = new AclProvider(tree); // Get ID of ACL used on API Example document int nodeACLID = ValidationHelper.GetInteger(node.GetValue("NodeACLID"), 0); // Delete all ACL items acl.ClearACLItems(nodeACLID); return true; } return false; }
internal static Boolean cloneNode(TreeProvider tp, CMS.DocumentEngine.TreeNode nodeToClone, CMS.DocumentEngine.TreeNode destinationNode, string action) { if (action == null) action = "0"; bool includeChildNodes = (action == "1" || action == "3"); bool includeAssociations = (action == "2" || action == "3"); if ((tp != null) && (nodeToClone != null) && (destinationNode != null)) { CMS.DocumentEngine.TreeNode newTreeNode = DocumentHelper.CopyDocument(nodeToClone, destinationNode.NodeID, false, tp); if (newTreeNode != null) { //Remove Average Rating and Review count from the New Document //US15667 if (IsShared == "true") { int allowUser = Convert.ToInt32(Math.Pow(2, Convert.ToInt32(NodePermissionsEnum.Delete))) + Convert.ToInt32(Math.Pow(2, Convert.ToInt32(NodePermissionsEnum.Read))); int deniedUser = Convert.ToInt32(Math.Pow(2, Convert.ToInt32(NodePermissionsEnum.Modify))) + Convert.ToInt32(Math.Pow(2, Convert.ToInt32(NodePermissionsEnum.ModifyPermissions))); AclProvider aclUser = new AclProvider(tp); aclUser.SetUserPermissions(newTreeNode, allowUser, deniedUser, theSharedUserRoles); } UpdateRatingAvgNCountsInKenticoDB(newTreeNode.NodeID); //Copy the parent node associations if (includeAssociations) CopyDocumentPlanAssociationDetails(nodeToClone.NodeID, newTreeNode.NodeID); if (includeChildNodes) { DataSet nodeToClone_DS = tp.SelectNodes(CMSContext.CurrentSiteName, nodeToClone.NodeAliasPath + "/%", "en-us", false, null, null, null, 1); if (nodeToClone_DS != null && nodeToClone_DS.Tables[0].Rows.Count > 0) { foreach (DataRow row in nodeToClone_DS.Tables[0].Rows) { int src = (int) row["NodeId"]; CMS.DocumentEngine.TreeNode childNode = DocumentHelper.GetDocument(src, "en-us", tp); if (childNode["ExpirationDate"] != null) { DateTime expirationDate = Convert.ToDateTime(childNode["ExpirationDate"]); if (expirationDate.Date < DateTime.Today) continue; } cloneNode(tp, childNode, newTreeNode, action); } } } } return true; } return false; }
/// <summary> /// On items selected event handling. /// </summary> private void usRoles_OnItemsSelected(object sender, EventArgs e) { AclProvider aclProv = null; // Create Acl provider to current treenode if (Node != null) { aclProv = new AclProvider(Tree); } // Remove old items string newValues = ValidationHelper.GetString(usRoles.Value, null); string items = DataHelper.GetNewItemsInList(newValues, CurrentValues); if (!String.IsNullOrEmpty(items)) { string[] newItems = items.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (newItems != null) { // Add all new items to site foreach (string item in newItems) { int roleID = ValidationHelper.GetInteger(item, 0); if (PollID > 0) { // Remove role from poll ModuleCommands.PollsRemoveRoleFromPoll(roleID, PollID); } else if (FormID > 0) { // Remove role from form BizFormInfoProvider.RemoveRoleFromForm(roleID, FormID); } else if (BoardID > 0) { // Check permissions if (CMSContext.CurrentUser.IsAuthorizedPerResource("cms.messageboards", CMSAdminControl.PERMISSION_MODIFY)) { // Remove message board from board ModuleCommands.MessageBoardRemoveRoleFromBoard(roleID, BoardID); } } else if (Node != null) { if (aclProv != null) { // Remove role from treenode aclProv.RemoveRole(NodeID, roleID); } } } } } // Add new items items = DataHelper.GetNewItemsInList(CurrentValues, newValues); if (!String.IsNullOrEmpty(items)) { string[] newItems = items.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (newItems != null) { // Add all new items to site foreach (string item in newItems) { int roleID = ValidationHelper.GetInteger(item, 0); if (PollID > 0) { // Add poll role ModuleCommands.PollsAddRoleToPoll(roleID, PollID); } else if (FormID > 0) { // Add BizForm role BizFormInfoProvider.AddRoleToForm(roleID, FormID); } else if (BoardID > 0) { // Add role to the message board ModuleCommands.MessageBoardAddRoleToBoard(roleID, BoardID); } else if (Node != null) { // Add role to treenode if (aclProv != null) { aclProv.SetRolePermissions(Node, 0, 0, roleID); } } } } } // Log synchronization task if (Node != null) { DocumentSynchronizationHelper.LogDocumentChange(Node, TaskTypeEnum.UpdateDocument, Node.TreeProvider); } RaiseOnChanged(); }
public void Save() { CheckPermissions(true); int allowed = 0; int denied = 0; string operatorID = null; if (lstOperators.SelectedItem == null) { return; } else { operatorID = lstOperators.SelectedValue; allowed += GetCheckBoxValue(chkReadAllow, NodePermissionsEnum.Read); allowed += GetCheckBoxValue(chkModifyAllow, NodePermissionsEnum.Modify); allowed += GetCheckBoxValue(chkCreateAllow, NodePermissionsEnum.Create); allowed += GetCheckBoxValue(chkDeleteAllow, NodePermissionsEnum.Delete); allowed += GetCheckBoxValue(chkDestroyAllow, NodePermissionsEnum.Destroy); allowed += GetCheckBoxValue(chkExploreTreeAllow, NodePermissionsEnum.ExploreTree); allowed += GetCheckBoxValue(chkManagePermissionsAllow, NodePermissionsEnum.ModifyPermissions); denied += GetCheckBoxValue(chkReadDeny, NodePermissionsEnum.Read); denied += GetCheckBoxValue(chkModifyDeny, NodePermissionsEnum.Modify); denied += GetCheckBoxValue(chkCreateDeny, NodePermissionsEnum.Create); denied += GetCheckBoxValue(chkDeleteDeny, NodePermissionsEnum.Delete); denied += GetCheckBoxValue(chkDestroyDeny, NodePermissionsEnum.Destroy); denied += GetCheckBoxValue(chkExploreTreeDeny, NodePermissionsEnum.ExploreTree); denied += GetCheckBoxValue(chkManagePermissionsDeny, NodePermissionsEnum.ModifyPermissions); string message = null; string operatorName = lstOperators.SelectedItem.Text; if (operatorID.StartsWith("U")) { int userId = int.Parse(operatorID.Substring(1)); UserInfo ui = UserInfoProvider.GetUserInfo(userId); AclProvider.SetUserPermissions(Node, allowed, denied, ui); message = "security.documentuserpermissionschange"; } else { AclProvider.SetRolePermissions(Node, allowed, denied, int.Parse(operatorID.Substring(1))); message = "security.documentrolepermissionschange"; } lblInfo.Text = GetString("general.changessaved"); // Log synchronization task and flush cache DocumentSynchronizationHelper.LogDocumentChange(Node, TaskTypeEnum.UpdateDocument, Node.TreeProvider); CacheHelper.TouchKeys(TreeProvider.GetDependencyCacheKeys(Node, Node.NodeSiteName)); // Insert information about this event to eventlog. if (Tree.LogEvents) { EventLog.LogEvent(EventLogProvider.EVENT_TYPE_INFORMATION, DateTime.Now, "Content", "DOCPERMISSIONSMODIFIED", Tree.UserInfo.UserID, Tree.UserInfo.UserName, Node.NodeID, DocumentName, ipAddress, string.Format(ResHelper.GetAPIString(message, "Permissions of the operator '{0}' have been modified for the document."), operatorName), Node.NodeSiteID, eventUrl); } } if (Node != null) { // Invalidate permission data in current request TreeSecurityProvider.InvalidateTreeNodeAuthorizationResults(CMSContext.CurrentUser, NodeID, Node.DocumentCulture); AclProvider.InvalidateACLItems(CMSContext.CurrentUser.UserID, Node); } CheckPermissions(false, true); pnlUpdate.Update(); }
/// <summary> /// Initializes the control properties. /// </summary> protected void SetupControl() { if (StopProcessing) { // Do nothing srcUsers.StopProcessing = true; } else { TreeNode node = null; TreeProvider tree = new TreeProvider(CMSContext.CurrentUser); // Check if path is set if (String.IsNullOrEmpty(Path)) { TreeNode curDoc = CMSContext.CurrentDocument; // Check if current document is department if ((curDoc != null) && (curDoc.NodeClassName.ToLower() == DEPARTMENT_CLASS_NAME)) { node = CMSContext.CurrentDocument; } } else { // Obtain document from specified path node = tree.SelectSingleNode(SiteName, Path, CMSContext.PreferredCultureCode, true, DEPARTMENT_CLASS_NAME, false, false, false); } AclProvider aclProv = new AclProvider(tree); // If department document exists and has own ACL continue with initializing controls if ((node != null) && aclProv.HasOwnACL(node)) { // Get users and roles with read permission for department document int aclId = ValidationHelper.GetInteger(node.GetValue("NodeACLID"), 0); DataSet dsRoles = aclProv.GetAllowedRoles(aclId, NodePermissionsEnum.Read, "RoleID"); DataSet dsUsers = aclProv.GetAllowedUsers(aclId, NodePermissionsEnum.Read, "UserID"); string where = null; // Process users dataset to where condition if (!DataHelper.DataSourceIsEmpty(dsUsers)) { // Get allowed users ids IList<string> users = SqlHelperClass.GetStringValues(dsUsers.Tables[0], "UserID"); string userIds = TextHelper.Join(", ", users); // Populate where condition with user condition where = SqlHelperClass.AddWhereCondition("UserID IN (" + userIds + ")", where); } // Process roles dataset to where condition if (!DataHelper.DataSourceIsEmpty(dsRoles)) { // Get allowed roles ids IList<string> roles = SqlHelperClass.GetStringValues(dsRoles.Tables[0], "RoleID"); string roleIds = TextHelper.Join(", ", roles); // Populate where condition with role condition where = SqlHelperClass.AddWhereCondition("UserID IN (SELECT UserID FROM View_CMS_UserRole_MembershipRole_ValidOnly_Joined WHERE RoleID IN (" + roleIds + "))", where, "OR"); } if (!String.IsNullOrEmpty(where)) { // Check if exist where condition and add it to current where condition where = SqlHelperClass.AddWhereCondition(WhereCondition, where); // Set datasource properties srcUsers.WhereCondition = where; srcUsers.OrderBy = OrderBy; srcUsers.TopN = SelectTopN; srcUsers.FilterName = ValidationHelper.GetString(GetValue("WebPartControlID"), ClientID); srcUsers.SourceFilterName = FilterName; srcUsers.SiteName = SiteName; srcUsers.CacheItemName = CacheItemName; srcUsers.CacheDependencies = CacheDependencies; srcUsers.CacheMinutes = CacheMinutes; srcUsers.SelectOnlyApproved = SelectOnlyApproved; srcUsers.SelectHidden = SelectHidden; srcUsers.SelectedColumns = Columns; } else { srcUsers.StopProcessing = true; } } else { srcUsers.StopProcessing = true; } } }
protected void Page_Load(Object sender, EventArgs e) { currentSite = CMSContext.CurrentSite; currentUser = CMSContext.CurrentUser; ipAddress = HTTPHelper.UserHostAddress; eventUrl = HTTPHelper.GetAbsoluteUri(); if (!RequestHelper.IsCallback()) { btnCancel.Attributes.Add("onclick", ctlAsync.GetCancelScript(true) + "return false;"); btnCancel.Text = GetString("General.Cancel"); pnlLog.Visible = false; pnlPageContent.Visible = true; // Gets the node if (Node != null) { UIContext.PropertyTab = PropertyTabEnum.Security; // Check license if (DataHelper.GetNotEmpty(URLHelper.GetCurrentDomain(), string.Empty) != string.Empty) { if (!LicenseKeyInfoProvider.IsFeatureAvailable(URLHelper.GetCurrentDomain(), FeatureEnum.DocumentLevelPermissions)) { if (UIHelper.IsUnavailableUIHidden()) { plcContainer.Visible = false; } else { pnlPermissions.Visible = false; lblLicenseInfo.Visible = true; lblLicenseInfo.Text = GetString("Security.NotAvailableInThisEdition"); } } } // Initialize controls SetupControls(); // Register scripts ScriptHelper.RegisterDialogScript(this); // Check if document inherits permissions and display info inheritsPermissions = AclProvider.DoesNodeInheritPermissions(Node.NodeID); lblInheritanceInfo.Text = inheritsPermissions ? GetString("Security.InheritsInfo.Inherits") : GetString("Security.InheritsInfo.DoesNotInherit"); if (!RequestHelper.IsPostBack()) { // Set secured radio buttons switch (Node.IsSecuredNode) { case 0: radNo.Checked = true; break; case 1: radYes.Checked = true; break; default: if (Node.NodeParentID == 0) { radNo.Checked = true; } else { radParent.Checked = true; } break; } // Set secured radio buttons switch (Node.RequiresSSL) { case 0: radNoSSL.Checked = true; break; case 1: radYesSSL.Checked = true; break; case 2: radNeverSSL.Checked = true; break; default: if (Node.NodeParentID == 0) { radNoSSL.Checked = true; } else { radParentSSL.Checked = true; } break; } } // Hide link to the inheritance settings if this is the root node if (Node.NodeParentID == 0) { plcAuthParent.Visible = false; plcSSLParent.Visible = false; lnkInheritance.Visible = false; } } else { pnlPageContent.Visible = false; } } ctlAsync.OnFinished += ctlAsync_OnFinished; ctlAsync.OnError += ctlAsync_OnError; ctlAsync.OnRequestLog += ctlAsync_OnRequestLog; ctlAsync.OnCancel += ctlAsync_OnCancel; pnlPageContent.Enabled = !DocumentManager.ProcessingAction; }
/// <summary> /// On items selected event handling. /// </summary> private void usRoles_OnItemsSelected(object sender, EventArgs e) { AclProvider aclProv = null; // Create Acl provider to current treenode if (Node != null) { aclProv = new AclProvider(Tree); } // Remove old items string newValues = ValidationHelper.GetString(usRoles.Value, null); string items = DataHelper.GetNewItemsInList(newValues, CurrentValues); if (!String.IsNullOrEmpty(items)) { string[] newItems = items.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (newItems != null) { // Add all new items to site foreach (string item in newItems) { int roleID = ValidationHelper.GetInteger(item, 0); if (PollID > 0) { // Remove role from poll ModuleCommands.PollsRemoveRoleFromPoll(roleID, PollID); } else if (FormID > 0) { // Remove role from form BizFormInfoProvider.RemoveRoleFromForm(roleID, FormID); } else if (BoardID > 0) { // Check permissions if (CMSContext.CurrentUser.IsAuthorizedPerResource("cms.messageboards", CMSAdminControl.PERMISSION_MODIFY)) { // Remove message board from board ModuleCommands.MessageBoardRemoveRoleFromBoard(roleID, BoardID); } } else if (Node != null) { if (aclProv != null) { // Remove role from treenode aclProv.RemoveRole(NodeID, roleID); } } } } } // Add new items items = DataHelper.GetNewItemsInList(CurrentValues, newValues); if (!String.IsNullOrEmpty(items)) { string[] newItems = items.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (newItems != null) { // Add all new items to site foreach (string item in newItems) { int roleID = ValidationHelper.GetInteger(item, 0); if (PollID > 0) { // Add poll role ModuleCommands.PollsAddRoleToPoll(roleID, PollID); } else if (FormID > 0) { // Add BizForm role BizFormInfoProvider.AddRoleToForm(roleID, FormID); } else if (BoardID > 0) { // Add role to the message board ModuleCommands.MessageBoardAddRoleToBoard(roleID, BoardID); } else if (Node != null) { // Add role to treenode if (aclProv != null) { aclProv.SetRolePermissions(Node, 0, 0, roleID); } } } } } // Log synchronization task if (Node != null) { DocumentSynchronizationHelper.LogDocumentChange(Node, TaskTypeEnum.UpdateDocument, Node.TreeProvider); } RaiseOnChanged(); }
/// <summary> /// PreRender action on which security settings are set. /// </summary> private void Page_PreRender(object sender, EventArgs e) { if (mDocumentSaved) { TreeNode editedNode = Form.EditedObject as TreeNode; // Create or rebuild department content index CreateDepartmentContentSearchIndex(editedNode); AclProvider aclProv = new AclProvider(editedNode.TreeProvider); if (aclProv.HasOwnACL(editedNode)) { ForumInfo fi = ForumInfoProvider.GetForumInfo("Default_department_" + editedNode.NodeGUID, CMSContext.CurrentSiteID); MediaLibraryInfo mi = MediaLibraryInfoProvider.GetMediaLibraryInfo("Department_" + editedNode.NodeGUID, CMSContext.CurrentSiteName); // Check if forum of media library exists if ((fi != null) || (mi != null)) { // Get allowed roles ID int aclID = ValidationHelper.GetInteger(editedNode.GetValue("NodeACLID"), 0); DataSet listRoles = aclProv.GetAllowedRoles(aclID, NodePermissionsEnum.Read, "RoleID"); string roleIDs = null; if (!DataHelper.DataSourceIsEmpty(listRoles)) { IList <string> roles = SystemDataHelper.GetStringValues(listRoles.Tables[0], "RoleID"); roleIDs = TextHelper.Join(";", roles); } // Set permissions for forum if (fi != null) { // Get resource object ResourceInfo resForums = ResourceInfoProvider.GetResourceInfo("CMS.Forums"); // Get permissions IDs DataSet dsForumPerm = PermissionNameInfoProvider.GetPermissionNames("ResourceID = " + resForums.ResourceId + " AND (PermissionName != '" + CMSAdminControl.PERMISSION_READ + "' AND PermissionName != '" + CMSAdminControl.PERMISSION_MODIFY + "')", null, 0, "PermissionID"); string forumPermissions = null; if (!DataHelper.DataSourceIsEmpty(dsForumPerm)) { foreach (DataRow drForumPerm in dsForumPerm.Tables[0].Rows) { forumPermissions += drForumPerm["PermissionID"] + ";"; } forumPermissions = forumPermissions.TrimEnd(';'); } // Delete old permissions apart attach file permission ForumRoleInfoProvider.DeleteAllRoles("ForumID = " + fi.ForumID + " AND PermissionID IN (" + forumPermissions.Replace(";", ", ") + ")"); // Set forum permissions ForumRoleInfoProvider.SetPermissions(fi.ForumID, roleIDs, forumPermissions); // Log staging task SynchronizationHelper.LogObjectChange(fi, TaskTypeEnum.UpdateObject); } // Set permissions for media library if (mi != null) { // Get resource object ResourceInfo resMediaLibs = ResourceInfoProvider.GetResourceInfo("CMS.MediaLibrary"); // Get permissions IDs DataSet dsMediaLibPerm = PermissionNameInfoProvider.GetPermissionNames("ResourceID = " + resMediaLibs.ResourceId + " AND (PermissionName = 'LibraryAccess' OR PermissionName = 'FileCreate')", null, 0, "PermissionID"); string mediaLibPermissions = null; if (!DataHelper.DataSourceIsEmpty(dsMediaLibPerm)) { foreach (DataRow drMediaLibPerm in dsMediaLibPerm.Tables[0].Rows) { mediaLibPermissions += drMediaLibPerm["PermissionID"] + ";"; } mediaLibPermissions = mediaLibPermissions.TrimEnd(';'); } // Delete old permissions only for Create file and See library content permissions MediaLibraryRolePermissionInfoProvider.DeleteAllRoles("LibraryID = " + mi.LibraryID + " AND PermissionID IN (" + mediaLibPermissions.Replace(";", ", ") + ")"); // Set media library permissions MediaLibraryRolePermissionInfoProvider.SetPermissions(mi.LibraryID, roleIDs, mediaLibPermissions); // Log staging task SynchronizationHelper.LogObjectChange(mi, TaskTypeEnum.UpdateObject); } } } } }
/// <summary> /// Resets permission inheritance of node and its children. /// </summary> /// <param name="siteName">Name of site</param> /// <param name="nodeAliasPath">Alias path</param> /// <param name="recursive">Indicates whether to recursively reset all nodes below the current node</param> /// <param name="user">Current user</param> /// <param name="tr">Tree provider</param> /// <returns>Whether TRUE if no permission conflict has occurred</returns> private bool ResetNodePermission(string siteName, string nodeAliasPath, bool recursive, CurrentUserInfo user, TreeProvider tr) { // Check permissions bool permissionsResult = false; try { if (tr == null) { tr = new TreeProvider(user); } // Get node by alias path TreeNode treeNode = tr.SelectSingleNode(siteName, nodeAliasPath, null, true, null, false); permissionsResult = CanModifyPermission(!recursive, treeNode, user); if (treeNode != null) { // If user has permissions if (permissionsResult) { // Break inheritance of a node if (!AclProvider.DoesNodeInheritPermissions(treeNode.NodeID)) { // Restore inheritance of a node AclProvider.RestoreInheritance(treeNode); // Log current encoded alias path AddLog(HTMLHelper.HTMLEncode(nodeAliasPath)); // Log staging task and flush cache DocumentSynchronizationHelper.LogDocumentChange(treeNode, TaskTypeEnum.RestoreACLInheritance, treeNode.TreeProvider, SynchronizationInfoProvider.ENABLED_SERVERS, null, treeNode.TreeProvider.AllowAsyncActions); CacheHelper.TouchKeys(TreeProvider.GetDependencyCacheKeys(Node, Node.NodeSiteName)); // Insert information about this event to event log. if (DocumentManager.Tree.LogEvents) { if (recursive) { LogContext.LogEvent(EventLogProvider.EVENT_TYPE_INFORMATION, DateTime.Now, "Content", "DOCPERMISSIONSMODIFIED", user.UserID, user.UserName, treeNode.NodeID, treeNode.GetDocumentName(), ipAddress, string.Format(ResHelper.GetAPIString("security.documentpermissionsrestoredfordoc", "Permissions of document '{0}' have been restored to the parent document permissions."), nodeAliasPath), Node.NodeSiteID, null, null, null, null); } else { EventLog.LogEvent(EventLogProvider.EVENT_TYPE_INFORMATION, DateTime.Now, "Content", "DOCPERMISSIONSMODIFIED", user.UserID, user.UserName, treeNode.NodeID, treeNode.GetDocumentName(), ipAddress, ResHelper.GetAPIString("security.documentpermissionsrestored", "Permissions have been restored to the parent document permissions."), Node.NodeSiteID, eventUrl); } } } else { AddLog(string.Format(ResHelper.GetString("cmsdesk.skippingrestoring"), HTMLHelper.HTMLEncode(nodeAliasPath))); } } // Recursively reset node inheritance if (recursive) { // Get child nodes of current node DataSet ds = DocumentManager.Tree.SelectNodes(siteName, treeNode.NodeAliasPath.TrimEnd('/') + "/%", TreeProvider.ALL_CULTURES, true, null, null, null, 1, false, -1, TreeProvider.SELECTNODES_REQUIRED_COLUMNS + ",NodeAliasPath"); if (!DataHelper.DataSourceIsEmpty(ds)) { foreach (DataRow dr in ds.Tables[0].Rows) { string childNodeAliasPath = ValidationHelper.GetString(dr["NodeAliasPath"], string.Empty); if (!string.IsNullOrEmpty(childNodeAliasPath)) { bool tempPermissionsResult = ResetNodePermission(siteName, childNodeAliasPath, true, user, tr); permissionsResult = tempPermissionsResult && permissionsResult; } } } } } } catch (ThreadAbortException ex) { string state = ValidationHelper.GetString(ex.ExceptionState, string.Empty); if (state == CMSThread.ABORT_REASON_STOP) { // When canceled CurrentInfo = ResHelper.GetString("cmsdesk.restoringcanceled"); AddLog(CurrentInfo); } else { // Log error CurrentError = ResHelper.GetString("cmsdesk.restoringfailed") + ": " + ex.Message; AddLog(CurrentError); } } catch (Exception ex) { // Log error CurrentError = ResHelper.GetString("cmsdesk.restoringfailed") + ": " + ex.Message; AddLog(CurrentError); } return(permissionsResult); }
/// <summary> /// Initializes the control properties. /// </summary> protected void SetupControl() { if (StopProcessing) { // Do nothing filterUsers.StopProcessing = true; srcUsers.StopProcessing = true; } else { // Set general properties repUsers.DataBindByDefault = false; pagerElem.PageControl = repUsers.ID; filterUsers.Visible = ShowFilterControl; filterUsers.OnFilterChanged += filterUsers_OnFilterChanged; srcUsers.OnFilterChanged += filterUsers_OnFilterChanged; // Basic control properties repUsers.HideControlForZeroRows = HideControlForZeroRows; repUsers.ZeroRowsText = ZeroRowsText; TreeNode node = null; TreeProvider tree = new TreeProvider(CMSContext.CurrentUser); // Check if path is set if (String.IsNullOrEmpty(Path)) { TreeNode curDoc = CMSContext.CurrentDocument; // Check if current document is department if ((curDoc != null) && (curDoc.NodeClassName.ToLowerCSafe() == DEPARTMENT_CLASS_NAME)) { node = CMSContext.CurrentDocument; } } else { // Obtain document from specified path node = tree.SelectSingleNode(SiteName, Path, CMSContext.PreferredCultureCode, true, DEPARTMENT_CLASS_NAME, false, false, false); } AclProvider aclProv = new AclProvider(tree); // If department document exists and has own ACL continue with initializing controls if ((node != null) && aclProv.HasOwnACL(node)) { // Get users and roles with read permission for department document int aclId = ValidationHelper.GetInteger(node.GetValue("NodeACLID"), 0); DataSet dsRoles = aclProv.GetAllowedRoles(aclId, NodePermissionsEnum.Read, "RoleID"); DataSet dsUsers = aclProv.GetAllowedUsers(aclId, NodePermissionsEnum.Read, "UserID"); string where = null; // Process users dataset to where condition if (!DataHelper.DataSourceIsEmpty(dsUsers)) { // Get allowed users ids IList <string> users = SystemDataHelper.GetStringValues(dsUsers.Tables[0], "UserID"); string userIds = TextHelper.Join(", ", users); // Populate where condition with user condition where = SqlHelperClass.AddWhereCondition("UserID IN (" + userIds + ")", where); } // Process roles dataset to where condition if (!DataHelper.DataSourceIsEmpty(dsRoles)) { // Get allowed roles ids IList <string> roles = SystemDataHelper.GetStringValues(dsRoles.Tables[0], "RoleID"); string roleIds = TextHelper.Join(", ", roles); // Populate where condition with role condition where = SqlHelperClass.AddWhereCondition("UserID IN (SELECT UserID FROM View_CMS_UserRole_MembershipRole_ValidOnly_Joined WHERE RoleID IN (" + roleIds + "))", where, "OR"); } if (!String.IsNullOrEmpty(where)) { // Check if exist where condition and add it to current where condition where = SqlHelperClass.AddWhereCondition(WhereCondition, where); // Data source properties srcUsers.WhereCondition = where; srcUsers.OrderBy = OrderBy; srcUsers.TopN = SelectTopN; srcUsers.SelectedColumns = Columns; srcUsers.SiteName = SiteName; srcUsers.FilterName = filterUsers.ID; srcUsers.SourceFilterName = FilterName; srcUsers.CacheItemName = CacheItemName; srcUsers.CacheDependencies = CacheDependencies; srcUsers.CacheMinutes = CacheMinutes; srcUsers.SelectOnlyApproved = SelectOnlyApproved; srcUsers.SelectHidden = SelectHidden; // Init data properties filterUsers.InitDataProperties(srcUsers); #region "Repeater template properties" // Apply transformations if they exist if (!String.IsNullOrEmpty(TransformationName)) { repUsers.ItemTemplate = CMSDataProperties.LoadTransformation(this, TransformationName, false); } if (!String.IsNullOrEmpty(AlternatingItemTransformationName)) { repUsers.AlternatingItemTemplate = CMSDataProperties.LoadTransformation(this, AlternatingItemTransformationName, false); } if (!String.IsNullOrEmpty(FooterTransformationName)) { repUsers.FooterTemplate = CMSDataProperties.LoadTransformation(this, FooterTransformationName, false); } if (!String.IsNullOrEmpty(HeaderTransformationName)) { repUsers.HeaderTemplate = CMSDataProperties.LoadTransformation(this, HeaderTransformationName, false); } if (!String.IsNullOrEmpty(SeparatorTransformationName)) { repUsers.SeparatorTemplate = CMSDataProperties.LoadTransformation(this, SeparatorTransformationName, false); } #endregion // UniPager properties pagerElem.PageSize = PageSize; pagerElem.GroupSize = GroupSize; pagerElem.QueryStringKey = QueryStringKey; pagerElem.DisplayFirstLastAutomatically = DisplayFirstLastAutomatically; pagerElem.DisplayPreviousNextAutomatically = DisplayPreviousNextAutomatically; pagerElem.HidePagerForSinglePage = HidePagerForSinglePage; pagerElem.Enabled = EnablePaging; switch (PagingMode.ToLowerCSafe()) { case "querystring": pagerElem.PagerMode = UniPagerMode.Querystring; break; default: pagerElem.PagerMode = UniPagerMode.PostBack; break; } #region "UniPager template properties" // UniPager template properties if (!String.IsNullOrEmpty(PagesTemplate)) { pagerElem.PageNumbersTemplate = CMSDataProperties.LoadTransformation(pagerElem, PagesTemplate, false); } if (!String.IsNullOrEmpty(CurrentPageTemplate)) { pagerElem.CurrentPageTemplate = CMSDataProperties.LoadTransformation(pagerElem, CurrentPageTemplate, false); } if (!String.IsNullOrEmpty(SeparatorTemplate)) { pagerElem.PageNumbersSeparatorTemplate = CMSDataProperties.LoadTransformation(pagerElem, SeparatorTemplate, false); } if (!String.IsNullOrEmpty(FirstPageTemplate)) { pagerElem.FirstPageTemplate = CMSDataProperties.LoadTransformation(pagerElem, FirstPageTemplate, false); } if (!String.IsNullOrEmpty(LastPageTemplate)) { pagerElem.LastPageTemplate = CMSDataProperties.LoadTransformation(pagerElem, LastPageTemplate, false); } if (!String.IsNullOrEmpty(PreviousPageTemplate)) { pagerElem.PreviousPageTemplate = CMSDataProperties.LoadTransformation(pagerElem, PreviousPageTemplate, false); } if (!String.IsNullOrEmpty(NextPageTemplate)) { pagerElem.NextPageTemplate = CMSDataProperties.LoadTransformation(pagerElem, NextPageTemplate, false); } if (!String.IsNullOrEmpty(PreviousGroupTemplate)) { pagerElem.PreviousGroupTemplate = CMSDataProperties.LoadTransformation(pagerElem, PreviousGroupTemplate, false); } if (!String.IsNullOrEmpty(NextGroupTemplate)) { pagerElem.NextGroupTemplate = CMSDataProperties.LoadTransformation(pagerElem, NextGroupTemplate, false); } if (!String.IsNullOrEmpty(DirectPageTemplate)) { pagerElem.DirectPageTemplate = CMSDataProperties.LoadTransformation(pagerElem, DirectPageTemplate, false); } if (!String.IsNullOrEmpty(LayoutTemplate)) { pagerElem.LayoutTemplate = CMSDataProperties.LoadTransformation(pagerElem, LayoutTemplate, false); } #endregion // Connects repeater with data source repUsers.DataSource = srcUsers.DataSource; repUsers.DataBind(); } else { // Disable datasource srcUsers.StopProcessing = true; } } else { // Disable datasource srcUsers.StopProcessing = true; } } }
/// <summary> /// PreRender action on which security settings are set. /// </summary> void Page_PreRender(object sender, EventArgs e) { if (mDocumentSaved) { TreeNode editedNode = Form.EditedObject as TreeNode; // Create or rebuild department content index CreateDepartmentContentSearchIndex(editedNode); AclProvider aclProv = new AclProvider(editedNode.TreeProvider); if (aclProv.HasOwnACL(editedNode)) { ForumInfo fi = ForumInfoProvider.GetForumInfo("Default_department_" + editedNode.NodeGUID, CMSContext.CurrentSiteID); MediaLibraryInfo mi = MediaLibraryInfoProvider.GetMediaLibraryInfo("Department_" + editedNode.NodeGUID, CMSContext.CurrentSiteName); // Check if forum of media library exists if ((fi != null) || (mi != null)) { // Get allowed roles ID int aclID = ValidationHelper.GetInteger(editedNode.GetValue("NodeACLID"), 0); DataSet listRoles = aclProv.GetAllowedRoles(aclID, NodePermissionsEnum.Read, "RoleID"); string roleIDs = null; if (!DataHelper.DataSourceIsEmpty(listRoles)) { IList<string> roles = SqlHelperClass.GetStringValues(listRoles.Tables[0], "RoleID"); roleIDs = TextHelper.Join(";", roles); } // Set permissions for forum if (fi != null) { // Get resource object ResourceInfo resForums = ResourceInfoProvider.GetResourceInfo("CMS.Forums"); // Get permissions IDs DataSet dsForumPerm = PermissionNameInfoProvider.GetPermissionNames("ResourceID = " + resForums.ResourceId + " AND (PermissionName != '" + CMSAdminControl.PERMISSION_READ + "' AND PermissionName != '" + CMSAdminControl.PERMISSION_MODIFY + "')", null, 0, "PermissionID"); string forumPermissions = null; if (!DataHelper.DataSourceIsEmpty(dsForumPerm)) { foreach (DataRow drForumPerm in dsForumPerm.Tables[0].Rows) { forumPermissions += drForumPerm["PermissionID"] + ";"; } forumPermissions = forumPermissions.TrimEnd(';'); } // Delete old permissions apart attach file permission ForumRoleInfoProvider.DeleteAllRoles("ForumID = " + fi.ForumID + " AND PermissionID IN (" + forumPermissions.Replace(";", ", ") + ")"); // Set forum permissions ForumRoleInfoProvider.SetPermissions(fi.ForumID, roleIDs, forumPermissions); // Log staging task SynchronizationHelper.LogObjectChange(fi, TaskTypeEnum.UpdateObject); } // Set permissions for media library if (mi != null) { // Get resource object ResourceInfo resMediaLibs = ResourceInfoProvider.GetResourceInfo("CMS.MediaLibrary"); // Get permissions IDs DataSet dsMediaLibPerm = PermissionNameInfoProvider.GetPermissionNames("ResourceID = " + resMediaLibs.ResourceId + " AND (PermissionName = 'LibraryAccess' OR PermissionName = 'FileCreate')", null, 0, "PermissionID"); string mediaLibPermissions = null; if (!DataHelper.DataSourceIsEmpty(dsMediaLibPerm)) { foreach (DataRow drMediaLibPerm in dsMediaLibPerm.Tables[0].Rows) { mediaLibPermissions += drMediaLibPerm["PermissionID"] + ";"; } mediaLibPermissions = mediaLibPermissions.TrimEnd(';'); } // Delete old permissions only for Create file and See library content permissions MediaLibraryRolePermissionInfoProvider.DeleteAllRoles("LibraryID = " + mi.LibraryID + " AND PermissionID IN (" + mediaLibPermissions.Replace(";", ", ") + ")"); // Set media library permissions MediaLibraryRolePermissionInfoProvider.SetPermissions(mi.LibraryID, roleIDs, mediaLibPermissions); // Log staging task SynchronizationHelper.LogObjectChange(mi, TaskTypeEnum.UpdateObject); } } } } }
/// <summary> /// Initializes the control properties. /// </summary> protected void SetupControl() { if (StopProcessing) { // Do nothing filterUsers.StopProcessing = true; srcUsers.StopProcessing = true; } else { // Set general properties repUsers.DataBindByDefault = false; pagerElem.PageControl = repUsers.ID; filterUsers.Visible = ShowFilterControl; filterUsers.OnFilterChanged += filterUsers_OnFilterChanged; srcUsers.OnFilterChanged += filterUsers_OnFilterChanged; // Basic control properties repUsers.HideControlForZeroRows = HideControlForZeroRows; repUsers.ZeroRowsText = ZeroRowsText; TreeNode node = null; TreeProvider tree = new TreeProvider(CMSContext.CurrentUser); // Check if path is set if (String.IsNullOrEmpty(Path)) { TreeNode curDoc = CMSContext.CurrentDocument; // Check if current document is department if ((curDoc != null) && (curDoc.NodeClassName.ToLower() == DEPARTMENT_CLASS_NAME)) { node = CMSContext.CurrentDocument; } } else { // Obtain document from specified path node = tree.SelectSingleNode(SiteName, Path, CMSContext.PreferredCultureCode, true, DEPARTMENT_CLASS_NAME, false, false, false); } AclProvider aclProv = new AclProvider(tree); // If department document exists and has own ACL continue with initializing controls if ((node != null) && aclProv.HasOwnACL(node)) { // Get users and roles with read permission for department document int aclId = ValidationHelper.GetInteger(node.GetValue("NodeACLID"), 0); DataSet dsRoles = aclProv.GetAllowedRoles(aclId, NodePermissionsEnum.Read, "RoleID"); DataSet dsUsers = aclProv.GetAllowedUsers(aclId, NodePermissionsEnum.Read, "UserID"); string where = null; // Process users dataset to where condition if (!DataHelper.DataSourceIsEmpty(dsUsers)) { // Get allowed users ids IList<string> users = SqlHelperClass.GetStringValues(dsUsers.Tables[0], "UserID"); string userIds = TextHelper.Join(", ", users); // Populate where condition with user condition where = SqlHelperClass.AddWhereCondition("UserID IN (" + userIds + ")", where); } // Process roles dataset to where condition if (!DataHelper.DataSourceIsEmpty(dsRoles)) { // Get allowed roles ids IList<string> roles = SqlHelperClass.GetStringValues(dsRoles.Tables[0], "RoleID"); string roleIds = TextHelper.Join(", ", roles); // Populate where condition with role condition where = SqlHelperClass.AddWhereCondition("UserID IN (SELECT UserID FROM View_CMS_UserRole_MembershipRole_ValidOnly_Joined WHERE RoleID IN (" + roleIds + "))", where, "OR"); } if (!String.IsNullOrEmpty(where)) { // Check if exist where condition and add it to current where condition where = SqlHelperClass.AddWhereCondition(WhereCondition, where); // Data source properties srcUsers.WhereCondition = where; srcUsers.OrderBy = OrderBy; srcUsers.TopN = SelectTopN; srcUsers.SelectedColumns = Columns; srcUsers.SiteName = SiteName; srcUsers.FilterName = filterUsers.ID; srcUsers.SourceFilterName = FilterName; srcUsers.CacheItemName = CacheItemName; srcUsers.CacheDependencies = CacheDependencies; srcUsers.CacheMinutes = CacheMinutes; srcUsers.SelectOnlyApproved = SelectOnlyApproved; srcUsers.SelectHidden = SelectHidden; // Init data properties filterUsers.InitDataProperties(srcUsers); #region "Repeater template properties" // Apply transformations if they exist if (!String.IsNullOrEmpty(TransformationName)) { repUsers.ItemTemplate = CMSDataProperties.LoadTransformation(this, TransformationName, false); } if (!String.IsNullOrEmpty(AlternatingItemTransformationName)) { repUsers.AlternatingItemTemplate = CMSDataProperties.LoadTransformation(this, AlternatingItemTransformationName, false); } if (!String.IsNullOrEmpty(FooterTransformationName)) { repUsers.FooterTemplate = CMSDataProperties.LoadTransformation(this, FooterTransformationName, false); } if (!String.IsNullOrEmpty(HeaderTransformationName)) { repUsers.HeaderTemplate = CMSDataProperties.LoadTransformation(this, HeaderTransformationName, false); } if (!String.IsNullOrEmpty(SeparatorTransformationName)) { repUsers.SeparatorTemplate = CMSDataProperties.LoadTransformation(this, SeparatorTransformationName, false); } #endregion // UniPager properties pagerElem.PageSize = PageSize; pagerElem.GroupSize = GroupSize; pagerElem.QueryStringKey = QueryStringKey; pagerElem.DisplayFirstLastAutomatically = DisplayFirstLastAutomatically; pagerElem.DisplayPreviousNextAutomatically = DisplayPreviousNextAutomatically; pagerElem.HidePagerForSinglePage = HidePagerForSinglePage; pagerElem.Enabled = EnablePaging; switch (PagingMode.ToLower()) { case "querystring": pagerElem.PagerMode = UniPagerMode.Querystring; break; default: pagerElem.PagerMode = UniPagerMode.PostBack; break; } #region "UniPager template properties" // UniPager template properties if (!String.IsNullOrEmpty(PagesTemplate)) { pagerElem.PageNumbersTemplate = CMSDataProperties.LoadTransformation(pagerElem, PagesTemplate, false); } if (!String.IsNullOrEmpty(CurrentPageTemplate)) { pagerElem.CurrentPageTemplate = CMSDataProperties.LoadTransformation(pagerElem, CurrentPageTemplate, false); } if (!String.IsNullOrEmpty(SeparatorTemplate)) { pagerElem.PageNumbersSeparatorTemplate = CMSDataProperties.LoadTransformation(pagerElem, SeparatorTemplate, false); } if (!String.IsNullOrEmpty(FirstPageTemplate)) { pagerElem.FirstPageTemplate = CMSDataProperties.LoadTransformation(pagerElem, FirstPageTemplate, false); } if (!String.IsNullOrEmpty(LastPageTemplate)) { pagerElem.LastPageTemplate = CMSDataProperties.LoadTransformation(pagerElem, LastPageTemplate, false); } if (!String.IsNullOrEmpty(PreviousPageTemplate)) { pagerElem.PreviousPageTemplate = CMSDataProperties.LoadTransformation(pagerElem, PreviousPageTemplate, false); } if (!String.IsNullOrEmpty(NextPageTemplate)) { pagerElem.NextPageTemplate = CMSDataProperties.LoadTransformation(pagerElem, NextPageTemplate, false); } if (!String.IsNullOrEmpty(PreviousGroupTemplate)) { pagerElem.PreviousGroupTemplate = CMSDataProperties.LoadTransformation(pagerElem, PreviousGroupTemplate, false); } if (!String.IsNullOrEmpty(NextGroupTemplate)) { pagerElem.NextGroupTemplate = CMSDataProperties.LoadTransformation(pagerElem, NextGroupTemplate, false); } if (!String.IsNullOrEmpty(DirectPageTemplate)) { pagerElem.DirectPageTemplate = CMSDataProperties.LoadTransformation(pagerElem, DirectPageTemplate, false); } if (!String.IsNullOrEmpty(LayoutTemplate)) { pagerElem.LayoutTemplate = CMSDataProperties.LoadTransformation(pagerElem, LayoutTemplate, false); } #endregion // Connects repeater with data source repUsers.DataSource = srcUsers.DataSource; repUsers.DataBind(); } else { // Disable datasource srcUsers.StopProcessing = true; } } else { // Disable datasource srcUsers.StopProcessing = true; } } }
/// <summary> /// Initializes the control properties. /// </summary> protected void SetupControl() { if (StopProcessing) { // Do nothing srcUsers.StopProcessing = true; } else { TreeNode node = null; TreeProvider tree = new TreeProvider(CMSContext.CurrentUser); // Check if path is set if (String.IsNullOrEmpty(Path)) { TreeNode curDoc = CMSContext.CurrentDocument; // Check if current document is department if ((curDoc != null) && (curDoc.NodeClassName.ToLower() == DEPARTMENT_CLASS_NAME)) { node = CMSContext.CurrentDocument; } } else { // Obtain document from specified path node = tree.SelectSingleNode(SiteName, Path, CMSContext.PreferredCultureCode, true, DEPARTMENT_CLASS_NAME, false, false, false); } AclProvider aclProv = new AclProvider(tree); // If department document exists and has own ACL continue with initializing controls if ((node != null) && aclProv.HasOwnACL(node)) { // Get users and roles with read permission for department document int aclId = ValidationHelper.GetInteger(node.GetValue("NodeACLID"), 0); DataSet dsRoles = aclProv.GetAllowedRoles(aclId, NodePermissionsEnum.Read, "RoleID"); DataSet dsUsers = aclProv.GetAllowedUsers(aclId, NodePermissionsEnum.Read, "UserID"); string where = null; // Process users dataset to where condition if (!DataHelper.DataSourceIsEmpty(dsUsers)) { // Get allowed users ids IList <string> users = SqlHelperClass.GetStringValues(dsUsers.Tables[0], "UserID"); string userIds = TextHelper.Join(", ", users); // Populate where condition with user condition where = SqlHelperClass.AddWhereCondition("UserID IN (" + userIds + ")", where); } // Process roles dataset to where condition if (!DataHelper.DataSourceIsEmpty(dsRoles)) { // Get allowed roles ids IList <string> roles = SqlHelperClass.GetStringValues(dsRoles.Tables[0], "RoleID"); string roleIds = TextHelper.Join(", ", roles); // Populate where condition with role condition where = SqlHelperClass.AddWhereCondition("UserID IN (SELECT UserID FROM View_CMS_UserRole_MembershipRole_ValidOnly_Joined WHERE RoleID IN (" + roleIds + "))", where, "OR"); } if (!String.IsNullOrEmpty(where)) { // Check if exist where condition and add it to current where condition where = SqlHelperClass.AddWhereCondition(WhereCondition, where); // Set datasource properties srcUsers.WhereCondition = where; srcUsers.OrderBy = OrderBy; srcUsers.TopN = SelectTopN; srcUsers.FilterName = ValidationHelper.GetString(GetValue("WebPartControlID"), ClientID); srcUsers.SourceFilterName = FilterName; srcUsers.SiteName = SiteName; srcUsers.CacheItemName = CacheItemName; srcUsers.CacheDependencies = CacheDependencies; srcUsers.CacheMinutes = CacheMinutes; srcUsers.SelectOnlyApproved = SelectOnlyApproved; srcUsers.SelectHidden = SelectHidden; srcUsers.SelectedColumns = Columns; } else { srcUsers.StopProcessing = true; } } else { srcUsers.StopProcessing = true; } } }
protected void usUsers_OnItemsSelected(object sender, EventArgs e) { AclProvider aclProv = null; // Create Acl provider to current treenode if (Node != null) { aclProv = new AclProvider(Tree); } // Remove old items string newValues = ValidationHelper.GetString(usUsers.Value, null); string items = DataHelper.GetNewItemsInList(newValues, CurrentValues); if (!String.IsNullOrEmpty(items)) { string[] newItems = items.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (newItems != null) { // Add all new items to site foreach (string item in newItems) { int userID = ValidationHelper.GetInteger(item, 0); if (BoardID > 0) { // Remove message board from board ModuleCommands.MessageBoardRemoveModeratorFromBoard(userID, BoardID); } else if (Node != null) { if (aclProv != null) { UserInfo ui = UserInfoProvider.GetUserInfo(userID); if (ui != null) { // Remove user from treenode aclProv.RemoveUser(NodeID, ui); } } } else if (ForumID > 0) { // Remove user from forum moderators ModuleCommands.ForumsRemoveForumModerator(userID, ForumID); } } } } // Add new items items = DataHelper.GetNewItemsInList(CurrentValues, newValues); if (!String.IsNullOrEmpty(items)) { string[] newItems = items.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (newItems != null) { // Add all new items to site foreach (string item in newItems) { int userID = ValidationHelper.GetInteger(item, 0); if (BoardID > 0) { // Add user to the message board ModuleCommands.MessageBoardAddModeratorToBoard(userID, BoardID); } else if (Node != null) { // Add user to treenode if (aclProv != null) { UserInfo ui = UserInfoProvider.GetUserInfo(userID); if (ui != null) { // Remove user from treenode aclProv.SetUserPermissions(Node, 0, 0, ui); } } } else if (ForumID > 0) { // Add user to the forum moderators ModuleCommands.ForumsAddForumModerator(userID, ForumID); } } } } // Log synchronization task if (Node != null) { DocumentSynchronizationHelper.LogDocumentChange(Node, TaskTypeEnum.UpdateDocument, Node.TreeProvider); } RaiseOnChanged(); }