public IQueryable <Modulo> SelecionarPorSistemaUsuario(int sistema, int usuario) { Usuario us = new UsuarioRepository().Selecionar(usuario); IQueryable <int> dados; if (us.Master) { dados = (from m in _db.Modulos where !m.Administracao && m.SistemaId == sistema select m.Id); } else { dados = (from q in _db.UsuarioFuncoes join f in _db.Funcoes on q.FuncaoId equals f.Id join m in _db.Modulos on f.ModuloId equals m.Id where q.UsuarioId == usuario && m.SistemaId == sistema select m.Id).Union((from pf in _db.PerfilFuncoes join f in _db.Funcoes on pf.FuncaoId equals f.Id join m in _db.Modulos on f.ModuloId equals m.Id where (from up in _db.UsuarioPerfis where up.UsuarioId == usuario && m.SistemaId == sistema select up.PerfilId).Contains(pf.PerfilId) select m.Id)); } if (us.Administrador) { dados = dados.Union((from m in _db.Modulos where m.Administracao && m.SistemaId == sistema select m.Id)); } return(from m in _db.Modulos where dados.Distinct().Contains(m.Id) select m); }
public IQueryable <UsuarioFuncaoDTO> SelecionarAcessoPorUsuarioModulo(int usuario, int modulo, int sistema) { bool admin = false; bool master = false; if (usuario != 0) { Usuario us = new UsuarioRepository().Selecionar(usuario); admin = us.Administrador; master = us.Master; } IQueryable <UsuarioFuncaoDTO> dados; if (!master) { dados = (from q in _db.UsuarioFuncoes join u in _db.Usuarios on q.UsuarioId equals u.Id join f in _db.Funcoes on q.FuncaoId equals f.Id join m in _db.Modulos on f.ModuloId equals m.Id where q.UsuarioId == usuario select new UsuarioFuncaoDTO { FuncaoId = q.FuncaoId, FuncaoDescricao = f.Descricao, FuncaoGrupo = f.Grupo, ModuloId = f.ModuloId, ModuloDescricao = m.Descricao, ModuloCor = m.Cor, SistemaId = m.SistemaId, PermiteIncluir = q.PermiteIncluir, PermiteAlterar = q.PermiteAlterar, PermiteExcluir = q.PermiteExcluir }).Union((from pf in _db.PerfilFuncoes join f in _db.Funcoes on pf.FuncaoId equals f.Id join m in _db.Modulos on f.ModuloId equals m.Id where (from up in _db.UsuarioPerfis where up.UsuarioId == usuario select up.PerfilId).Contains(pf.PerfilId) select new UsuarioFuncaoDTO { FuncaoId = pf.FuncaoId, FuncaoDescricao = f.Descricao, FuncaoGrupo = f.Grupo, ModuloId = f.ModuloId, ModuloDescricao = m.Descricao, ModuloCor = m.Cor, SistemaId = m.SistemaId, PermiteIncluir = pf.PermiteIncluir, PermiteAlterar = pf.PermiteAlterar, PermiteExcluir = pf.PermiteExcluir })); } else { dados = (from f in _db.Funcoes join m in _db.Modulos on f.ModuloId equals m.Id where !m.Administracao && m.SistemaId == sistema select new UsuarioFuncaoDTO { FuncaoId = f.Id, FuncaoDescricao = f.Descricao, FuncaoGrupo = f.Grupo, ModuloId = f.ModuloId, ModuloDescricao = m.Descricao, ModuloCor = m.Cor, SistemaId = m.SistemaId, PermiteIncluir = true, PermiteAlterar = true, PermiteExcluir = true }); } if (admin) { dados = dados.Union( (from f in _db.Funcoes join m in _db.Modulos on f.ModuloId equals m.Id where m.Administracao && m.SistemaId == sistema select new UsuarioFuncaoDTO { FuncaoId = f.Id, FuncaoDescricao = f.Descricao, FuncaoGrupo = f.Grupo, ModuloId = f.ModuloId, ModuloDescricao = m.Descricao, ModuloCor = m.Cor, SistemaId = m.SistemaId, PermiteIncluir = true, PermiteAlterar = true, PermiteExcluir = true })); } if (modulo != 0) { dados = dados.Where(p => p.ModuloId == modulo); } return(dados.Distinct()); }