Controle de Acesso por classes
John Lima
Respostas
Ronaldo Lanhellas
02/10/2014
Bom, existem 1 milhão de formas de fazer isso. Você pode fazer controle de acesso por Menu, por ação, por método, por Entidade (como você sugeriu). E para cada um desses tipos existem mais 1 milhão de formas de construir o controle de acesso. O ideal é que você poste sua ideia para que possamos lhe ajudar a evoluir.
John Lima
02/10/2014
id;
sistema (Tabela do banco,ou a Entidade)
codigo(codigo da tabela);
visualização booleano
inclusao booleano
alteracao booleano
todos booleano
Então quando eu fosse abri a tela para cadastro o sistema iria fazer uma busca,do código da tabela.
John Lima
02/10/2014
id;
sistema (Tabela do banco,ou a Entidade)
codigo(codigo da tabela);
visualização booleano
inclusao booleano
alteracao booleano
todos booleano
Então quando eu fosse abri a tela para cadastro o sistema iria fazer uma busca,do código da tabela.
Ronaldo Lanhellas
02/10/2014
John Lima
02/10/2014
Ronaldo Lanhellas
02/10/2014
1 - Estudando a estrutura do XML : http://www.oficinadanet.com.br/artigo/402/estrutura_de_um_arquivo_xml
2 - Depois de entender a estrutura e criar um XML que contenha todos os seus formulários, você precisa saber como ler esses dados em Java, então: https://www.devmedia.com.br/manipulando-arquivos-xml-em-java/3245
3 - Por fim, basta você trabalhar com os dados que você obteve da leitura do passo 2 e aplicar a perfis de usuário.
John Lima
02/10/2014
<telas>
<tela>
<id>2</id>
<descricao>banco</descricao>
<permisoes>
<permisao>INSERIR</permisao>
<permisao>ALTERAR</permisao>
<permisao>REMOVER</permisao>
<permisao>PESQUISAR</permisao>
<permisao>TODOS</permisao>
</permisoes>
</tela>
<tela>
<id>1</id>
<descricao>usuario</descricao>
<permisoes reference="../../tela/permisoes"/>
</tela>
</telas>
porem quando eu uso o método a baixo para o arquivo é gerado uma exceção :
public static void lerXML() {
try {
XStream xStream = new XStream(new Dom4JDriver());
xStream.alias("telas", ArrayList.class);
xStream.processAnnotations(Tela.class);
BufferedReader input = new BufferedReader(new FileReader("src/Permissao.xml"));
ArrayList<Tela> telas = (ArrayList) xStream.fromXML(input);
input.close();
for (Tela tela : telas) {
System.out.println("Codigo" + tela.getId()+ " - " +tela.getTela());
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
Exception in thread "main" com.thoughtworks.xstream.converters.ConversionException: tela : tela : tela : tela
---- Debugging information ----
message : tela : tela
cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : tela : tela
class : java.util.ArrayList
required-type : java.util.ArrayList
path : /telas/tela
xpath : /telas/tela
-------------------------------
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:89)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:63)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:76)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:60)
at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:137)
at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:33)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:923)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:909)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:853)
at com.br.emobeli.util.MetodosDiversos.lerXML(MetodosDiversos.java:29)
at com.br.emobeli.util.MetodosDiversos.main(MetodosDiversos.java:41)
Caused by: com.thoughtworks.xstream.mapper.CannotResolveClassException: tela : tela
at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:68)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:71)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:86)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:96)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:52)
at com.thoughtworks.xstream.core.util.HierarchicalStreams.readClassType(HierarchicalStreams.java:29)
at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:70)
at com.thoughtworks.xstream.converters.collections.CollectionConverter.populateCollection(CollectionConverter.java:68)
at com.thoughtworks.xstream.converters.collections.CollectionConverter.unmarshal(CollectionConverter.java:61)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:82)
Ronaldo Lanhellas
02/10/2014
John Lima
02/10/2014
@XmlRootElement
public class Tela implements Serializable {
@XmlAttribute
private Integer id;
@XmlElement
private String descricao;
@XmlElementWrapper
private List<Permissao> permisoes;
public Tela() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
@XmlTransient
public List<Permissao> getPermisoes() {
return permisoes;
}
public void setPermisoes(List<Permissao> permisoes) {
this.permisoes = permisoes;
}
Ronaldo Lanhellas
02/10/2014
@XStreamAlias("telas")
@XmlRootElement
public class Tela implements Serializable {
@XmlAttribute
private Integer id;
@XmlElement
private String descricao;
@XStreamImplicit(itemFieldName = "permissoes")
private List<Permissao> permisoes;
John Lima
02/10/2014
Ronaldo Lanhellas
02/10/2014
John Lima
02/10/2014
Ronaldo Lanhellas
02/10/2014
John Lima
02/10/2014
Ronaldo Lanhellas
02/10/2014
Se você está trabalhando com WEB, pode usar o controle por URL. Cadastra as URL's como componentes e controla o acesso a elas.
John Lima
02/10/2014
John Lima
02/10/2014
Ronaldo Lanhellas
02/10/2014
Bom, você pode tentar fazer uso do Java Reflection, varrendo todas as suas classes e buscando as que herdam de um JFrame, por exemplo. Quando encontrar, você adiciona esta classe a uma lista de componentes. Veja um exemplo: http://code.google.com/p/reflections/
John Lima
02/10/2014
Ronaldo Lanhellas
02/10/2014
No link que lhe mandei tem exemplos de como usar e neste curso da devmedia também está bem explicado. Como é um assunto abrangente, não da para explicar em detalhes aqui pelo fórum.
John Lima
02/10/2014
é o seguinte eu tenho a seguinte query:
select distinct c.subGrupo.subGrupo,(select sum(cp.valor)from ContaPagar cp where cp.subGrupo.subGrupo=c.subGrupo.subGrupo) from ContaPagar c ");
diante dessa query o Hibernate não me traz um objeto do tipo ContaPagar mais sim apenas um objeto, como eu faria para acessa esses valores dentro de laço já que eu não posso usar um for(ContaPagar: contas){
}
Ronaldo Lanhellas
02/10/2014
é o seguinte eu tenho a seguinte query:
select distinct c.subGrupo.subGrupo,(select sum(cp.valor)from ContaPagar cp where cp.subGrupo.subGrupo=c.subGrupo.subGrupo) from ContaPagar c ");
diante dessa query o Hibernate não me traz um objeto do tipo ContaPagar mais sim apenas um objeto, como eu faria para acessa esses valores dentro de laço já que eu não posso usar um for(ContaPagar: contas){
}
Entendo que sua query está retornando um objeto do tipo SubGrupo, mas não entendi qual a necessidade do seu laço FOR. Explique melhor por gentileza.
John Lima
02/10/2014
public List<ContaPagar> getBySubGrupoTotal() {
return getList(ContaPagar.class,"select distinct c.subGrupo.subGrupo,(select sum(cp.valor)from ContaPagar cp where cp.subGrupo.subGrupo=c.subGrupo.subGrupo) from ContaPagar c ");
}
eu fiz essa mesma consulta direto no banco, e eu recebo apenas 2 colunas.
subgrupo valor
alimentaçao 1.000
compras 10.000
quero esses valores para gera um grafico
Ronaldo Lanhellas
02/10/2014
1 - Você está retornando um atributo da classe ContaPagar;
2 - Você está criando uma nova coluna com o sum(cp.valor);
Você precisar usar um Map para fazer este tipo de retorno ou retornar apenas o objeto ContaPagar.
return getList(ContaPagar.class,"select distinct c from ContaPagar cp where cp.subGrupo.subGrupo=c.subGrupo.subGrupo) from ContaPagar c ");
John Lima
02/10/2014
Ronaldo Lanhellas
02/10/2014
Tente assim:
return getList(Map.class,"select new Map(distinct c.subGrupo.subGrupo as subgrupo, ,(select sum(cp.valor)from ContaPagar cp where cp.subGrupo.subGrupo=c.subGrupo.subGrupo) as soma ) from ContaPagar c ");
John Lima
02/10/2014
John Lima
02/10/2014
John Lima
02/10/2014
List<Object> sub = controle.getBySubGrupoTotal();
//Object obj[] = sub.toArray();
List<ValoresSubgrupo> lista = new LinkedList<>();
Iterator itr = sub.iterator();
while (itr.hasNext()) {
Object[] obj = (Object[]) itr.next();
//now you have one array of Object for each row
String sub= String.valueOf(obj[0]);
double valor = Double.parseDouble(String.valueOf(obj[1]));
ValoresSubgrupo v = new ValoresSubgrupo();
v.setSubgrupo(sub);
v.setValor(valor);
lista.add(v);
}
Ronaldo Lanhellas
02/10/2014
public Map getBySubGrupoTotal() {
E depois você recupera assim:
Map retornoMap = getBySubGrupoTotal();
Subgrupo sub = retornoMap.get("subgrupo");
double soma = retornoMap.get("soma");
Ronaldo Lanhellas
02/10/2014
public Map getBySubGrupoTotal() {
E depois você recupera assim:
Map retornoMap = getBySubGrupoTotal();
Subgrupo sub = retornoMap.get("subgrupo");
double soma = retornoMap.get("soma");
Ronaldo Lanhellas
02/10/2014
public Map getBySubGrupoTotal() {
E depois você recupera assim:
Map retornoMap = getBySubGrupoTotal();
Subgrupo sub = retornoMap.get("subgrupo");
double soma = retornoMap.get("soma");
John Lima
02/10/2014
Ronaldo Lanhellas
02/10/2014
isso, acabei esquecendo o List. Nesse caso retorne um "List<Map>"
John Lima
02/10/2014
Ronaldo Lanhellas
02/10/2014
Qual o link do tópico ?
John Lima
02/10/2014