/// <summary> /// Load ACLItems for the selected document. /// </summary> /// <param name="reload">Forces reload of listbox</param> private void LoadACLItems(bool reload) { if ((dsAclItems == null) || reload) { string where = GetWhereCondition(); dsAclItems = AclItemInfoProvider.GetAclItems(Node.NodeID, where, "OperatorName, Operator, Inherited DESC", 0, "Operator,ACLOwnerNodeID,OperatorName,OperatorFullName,Allowed,Denied,RoleGroupID,RoleID,SiteID, CASE WHEN (ACLOwnerNodeID = " + Node.NodeID + ") THEN 0 ELSE 1 END AS Inherited"); } }
/// <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) { AclInfoProvider.EnsureOwnAcl(EditedNode); } else { // If node has already own ACL don't leave permissions, otherwise break inheritance if (!AclInfoProvider.HasOwnAcl(EditedNode)) { AclInfoProvider.BreakInherintance(EditedNode, false); } } int aclId = ValidationHelper.GetInteger(EditedNode.GetValue("NodeACLID"), 0); // Get original ACLItems DataSet ds = AclItemInfoProvider.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; } RoleInfo ri = RoleInfoProvider.GetRoleInfo(aclRoleId); AclItemInfoProvider.SetRolePermissions(EditedNode, allowed, denied, ri); } } } // 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) { RoleInfo ri = RoleInfoProvider.GetRoleInfo(int.Parse(role)); AclItemInfoProvider.SetRolePermissions(EditedNode, 1, 0, ri); } } }