/// <summary> /// After node created, solver role permissions. /// </summary> private void AddRoles(object sender, EventArgs e) { string roleIds = ";" + usRoles.Value + ";"; // Check if ACL should inherit from parent if (InheritParentPermissions) { Provider.EnsureOwnAcl(EditedNode); } else { // If node has already own ACL don't leave permissions, otherwise break inheritance if (!Provider.HasOwnACL(EditedNode)) { Provider.BreakInherintance(EditedNode, false); } } int aclId = ValidationHelper.GetInteger(EditedNode.GetValue("NodeACLID"), 0); // Get orginal ACLItems DataSet ds = Provider.GetACLItems(EditedNode.NodeID, "Operator LIKE N'R%' AND ACLID = " + aclId, null, 0, "Operator, Allowed, Denied"); // Change original values if (!DataHelper.DataSourceIsEmpty(ds)) { foreach (DataRow dr in ds.Tables[0].Rows) { string op = DataHelper.GetNotEmpty(dr["Operator"], "R"); int allowed = ValidationHelper.GetInteger(dr["Allowed"], 0); int denied = ValidationHelper.GetInteger(dr["Denied"], 0); int aclRoleId = ValidationHelper.GetInteger(op.Substring(1), 0); if (aclRoleId != 0) { // Check if read permission should be set or removed if (roleIds.Contains(";" + aclRoleId + ";")) { // Remove role from processed role and adjust permissions in database roleIds = roleIds.Replace(";" + aclRoleId + ";", ";"); allowed |= 1; } else { allowed &= 126; } Provider.SetRolePermissions(EditedNode, allowed, denied, aclRoleId); } } } // Create ACL items for new roles if (roleIds.Trim(';') != "") { // Process rest of the roles string[] roles = roleIds.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); foreach (string role in roles) { Provider.SetRolePermissions(EditedNode, 1, 0, int.Parse(role)); } } }
/// <summary> /// Page_Load event. /// </summary> protected void Page_Load(object sender, EventArgs e) { // Check if node updated and role permissions should be loaded if (!usRoles.HasValue && (Form.Mode != FormModeEnum.Insert)) { // Check if node has own ACL if (Provider.HasOwnACL(EditedNode)) { DataSet dsRoles = Provider.GetAllowedRoles(ValidationHelper.GetInteger(EditedNode.GetValue("NodeACLID"), 0), Permission, "RoleID"); if (!DataHelper.DataSourceIsEmpty(dsRoles)) { IList <string> roles = SystemDataHelper.GetStringValues(dsRoles.Tables[0], "RoleID"); usRoles.Value = TextHelper.Join(";", roles); } } } // Set after save operation Form.OnAfterSave += AddRoles; // Initialize UniSelector Reload(false); }