/// <summary> /// Si el permiso pasado por parámetro pertenece a la jerarquía, se encarga de agregarlo convirtiendo -de ser necesario- hijos en padre. /// Considerar el root como punto de partida para agregar un elemento, garantiza que todo el árbol es recorrido. /// </summary> /// <param name="permission"></param> public override bool AddPermissionSorted(ProfileBM permission) { //La estrategia es simple: si el objeto es padre del permiso, se agrega directamente; en caso contrario, se busca recursivamente //un hijo que aplique como padre. Si el hijo que aplica no es padre, se procede a la conversión del mismo. if (this.code == permission.fatherCode) { this.permissions.Add(permission); return(true); } else { foreach (ProfileBM profile in permissions) { if (profile.IsFather()) { if (profile.AddPermissionSorted(permission)) { return(true); } } else if (profile.code == permission.fatherCode) { //El hijo que no es padre debe convertirse en padre. PermissionsMDL newFather = new PermissionsMDL(profile.fatherCode, profile.code, profile.Description, profile.excluded); newFather.AddPermissionSorted(permission); this.permissions.Remove(profile); this.permissions.Add(newFather); return(true); } } } return(false); }
public override bool AddPermission(ProfileBM permission) { throw new NotImplementedException(); }
public override bool AddPermissionSorted(ProfileBM permission) { //Responsabilidad del padre throw new NotImplementedException(); }
public abstract bool AddPermissionSorted(ProfileBM permission); //agrega el permiso ordenadamente public abstract bool AddPermission(ProfileBM permission); //agrega el permiso como hijo de este objeto
public override bool AddPermission(ProfileBM permission) { permission.fatherCode = this.code; return(this.AddPermissionSorted(permission)); }
public abstract bool AddPermissionSorted(ProfileBM permission); //agrega el permiso ordenadamente