示例#1
0
        private static PermisoBE ObtenerPermiso(int permisoId, int profundidad)
        {
            PermisoBE  permiso;
            List <int> hijosIds = new List <int>();

            if (profundidad < 10)
            {
                hijosIds = ObtenerPermisosHijos(permisoId);
            }

            if (hijosIds.Any())
            {
                // Es un permiso compuesto
                permiso = new PermisoCompuestoBE();
                foreach (int hijoId in hijosIds)
                {
                    PermisoBE permisoHijo = ObtenerPermiso(hijoId, profundidad + 1);
                    permiso.AgregarPermisoHijo(permisoHijo);
                }
            }
            else
            {
                // Es un permiso simple
                permiso = new PermisoSimpleBE();
            }

            CompletarPermiso(permiso, permisoId);

            return(permiso);
        }
        private static List <PermisoAbstractoBE> CargarBE(SqlDataReader pReader, bool pCompuesto, PermisoCompuestoBE pPermiso = null)
        {
            List <PermisoAbstractoBE> listaPermisos = new List <PermisoAbstractoBE>();

            while (pReader.Read())
            {
                if (pCompuesto)
                {
                    if (!BuscarPermiso(listaPermisos, pReader.GetInt32(pReader.GetOrdinal("permiso_id"))))
                    {
                        PermisoCompuestoBE permisoCompuesto = new PermisoCompuestoBE();

                        permisoCompuesto.ID      = pReader.GetInt32(pReader.GetOrdinal("permiso_id"));
                        permisoCompuesto.Nombre  = pReader.GetString(pReader.GetOrdinal("nombre"));
                        permisoCompuesto.PadreID = pReader.GetInt32(pReader.GetOrdinal("compuesto_padre"));

                        string        queryHijosComp  = "select * from permisoCompuesto where compuesto_padre = " + permisoCompuesto.ID;
                        SqlDataReader readerHijosComp = DBManager.Obtener(queryHijosComp);

                        permisoCompuesto.ListaPermisos.AddRange(CargarBE(readerHijosComp, true, permisoCompuesto));

                        string        queryHijos  = "select * from hijosCompuesto where compuesto_id = " + permisoCompuesto.ID;
                        SqlDataReader readerHijos = DBManager.Obtener(queryHijos);

                        permisoCompuesto.ListaPermisos.AddRange(CargarBE(readerHijos, false, permisoCompuesto));

                        if (pPermiso == null)
                        {
                            listaPermisos.Add(permisoCompuesto);
                        }
                        else
                        {
                            pPermiso.ListaPermisos.Add(permisoCompuesto);
                        }
                    }
                }
                else
                {
                    PermisoSimpleBE permisoSimple = new PermisoSimpleBE();

                    permisoSimple.ID     = pReader.GetInt32(pReader.GetOrdinal("permiso_id"));
                    permisoSimple.Nombre = pReader.GetString(pReader.GetOrdinal("nombre"));

                    if (pPermiso == null)
                    {
                        listaPermisos.Add(permisoSimple);
                    }
                    else
                    {
                        pPermiso.ListaPermisos.Add(permisoSimple);
                    }
                }
            }

            pReader.Close();

            return(listaPermisos);
        }
        public static void RelacionarPermisos(PermisoCompuestoBE pPermiso)
        {
            if (pPermiso.ListaPermisos.Count() > 0)
            {
                string queryQuitarRelaciones = "delete from hijosCompuesto where compuesto_id = " + pPermiso.ID + ";";
                DBManager.GuardarCambios(queryQuitarRelaciones);

                foreach (PermisoAbstractoBE permiso in pPermiso.ListaPermisos)
                {
                    if (permiso.GetType() == typeof(PermisoSimpleBE))
                    {
                        string query = "insert into hijosCompuesto (compuesto_id, simple_id) values(" + pPermiso.ID + ", " + permiso.ID + ");";
                        DBManager.GuardarCambios(query);
                    }
                }
            }
        }
        public static void AltaPermiso(PermisoCompuestoBE pPermiso)
        {
            string query;

            InsertarID(pPermiso);

            if (pPermiso.PadreID != 0)
            {
                query = "insert into permisoCompuesto(permiso_id, nombre, compuesto_padre) values(" + pPermiso.ID + ", '" + pPermiso.Nombre + "', " + pPermiso.PadreID + ");";
            }
            else
            {
                query = "insert into permisoCompuesto(permiso_id, nombre) values(" + pPermiso.ID + ", '" + pPermiso.Nombre + "');";
            }

            DBManager.GuardarCambios(query);
        }
        public static void EliminarPermisoCompuesto(PermisoCompuestoBE pPermiso)
        {
            foreach (PermisoAbstractoBE permiso in pPermiso.ListaPermisos)
            {
                if (permiso.GetType() == typeof(PermisoSimpleBE))
                {
                    QuitarRelacion(pPermiso.ID, permiso.ID);
                }
                else
                {
                    EliminarPermisoCompuesto((PermisoCompuestoBE)permiso);
                }
            }

            string query = "delete from permisoCompuesto where permiso_id = " + pPermiso.ID + ";";

            DBManager.GuardarCambios(query);
        }