WebCenter Portal - Configurando permissão de acesso usando Enterprise Roles

Por Waslley Souza ,
Postado em Março 2015

Quando criamos uma aplicação que necessita de controle de acesso, precisamos definir os usuários e grupos que devem ter acesso ao sistema e suas permissões. Geralmente em grandes empresas, esses dados estão armazenados em serviços de diretórios e/ou em banco de dados. Como exemplos de serviços de diretórios temos o Oracle Internet Directory (OID) da Oracle e o Active Directory (AD) da Microsoft.

Utilizando o WebLogic Server como servidor de aplicações, a configuração de serviços de diretórios ou banco de dados para consulta de usuários e permissões é bem simples de ser realizada.

Nesse artigo iremos aprender a configurar o WebLogic Server para consultar usuários e grupos do banco de dados e aplicar permissões de acesso por grupo em uma aplicação WebCenter. Não será apresentada a utilização de um serviço de diretórios.

Primeiramente devemos criar as tabelas de usuário e permissões no banco de dados. Para facilitar podemos utilizar a estrutura padrão que o WebLogic espera encontrar.

Nesse exemplo irei utilizar o schema HR. Execute o script abaixo no seu banco de dados para criar as tabelas.



CREATE TABLE USERS (  
 U_NAME VARCHAR(200) NOT NULL, 
 U_PASSWORD VARCHAR(50) NOT NULL, 
 U_DESCRIPTION VARCHAR(1000)); 
  ALTER TABLE USERS ADD CONSTRAINT PK_USERS PRIMARY KEY (U_NAME); 
  CREATE TABLE GROUPS (  
  G_NAME VARCHAR(200) NOT NULL, 
  G_DESCRIPTION VARCHAR(1000)); 
  ALTER TABLE GROUPS ADD CONSTRAINT PK_GROUPS PRIMARY KEY (G_NAME); 
  CREATE TABLE GROUPMEMBERS (  
  G_NAME VARCHAR(200) NOT NULL, 
  G_MEMBER VARCHAR(200) NOT NULL); 
  ALTER TABLE GROUPMEMBERS 
  ADD CONSTRAINT PK_GROUPMEMS  
  PRIMARY KEY (G_NAME, G_MEMBER); 
  ALTER TABLE GROUPMEMBERS 
  ADD CONSTRAINT FK1_GROUPMEMBERS  
  FOREIGN KEY ( G_NAME ) 
  REFERENCES GROUPS (G_NAME) 
  ON DELETE CASCADE; 

-- Create two users: user1 and user2



insert into USERS (U_NAME, U_PASSWORD, U_DESCRIPTION) values ('user1',  'user1', null);
  insert into USERS (U_NAME, U_PASSWORD, U_DESCRIPTION) values ('user2',  'user2', null); 

-- Create two groups: Administrator and User



insert into GROUPS (G_NAME, G_DESCRIPTION) values ('weblogic-admin',  'Administrator Group');
  insert into GROUPS (G_NAME, G_DESCRIPTION) values ('weblogic-user',  'User Group');

-- Create associations



insert into GROUPMEMBERS (G_NAME, G_MEMBER) values ('weblogic-admin',  'user1');  
insert into GROUPMEMBERS (G_NAME, G_MEMBER) values ('weblogic-user',  'user2');

Pronto, as tabelas foram criadas!

Agora devemos configurar o WebLogic. Primeiro vamos criar o datasource de conexão com o banco de dados. Acesse o Console de Administração e no menu em árvore navegue até Serviços > Origens de Dados. Clique em Novo e selecione Origem de Dados Genérica.

Informe o nome, nome da JNDI e tipo de banco de dados, e clique em Próximo.

Clique em Próximo.

Clique em Próximo.

Informe as propriedades de conexão com o banco de dados, e clique em Próximo.

Clique em Testar Configuração para fazer o teste de conexão. Caso seja bem-sucedido, clique em Próximo.

Selecione o seu servidor, e clique em Finalizar.

Uma mensagem solicitando a reinicialização do servidor é exibida, mas não faça isso ainda.

Agora precisamos configurar o nosso provedor de Autenticação. No menu em árvore, navegue até Realms de Segurança > myrealm.

Selecione a aba Provedores, e clique no botão Novo para criar um novo Provedor de Autenticação do tipo SQLAuthenticator que irá consultar as nossas tabelas.

Informe o nome, por exemplo SQLAuthenticator, e o tipo SQLAuthenticator. Clique em OK.

A mensagem solicitando a reinicialização do servidor é exibida novamente, mas não faça isso ainda. Clique em Reordenar e coloque o SQLAuthenticator na primeira posição. Clique em OK.

Acesse o SQLAuthenticator criado e selecione a aba Comum. No campo Flag de Controle, selecione a opção SUFFICIENT, e clique em Salvar. Com a opção SUFFICIENT, caso o usuário seja encontrado no provedor, o WebLogic Server não procura nos outros provedores.

Selecione a aba Específico do Provedor, selecione a opção Senhas de Texto Sem Formatação Ativadas, e no campo Nome da Origem de Dados informe o nome do Datasource criado anteriormente, e clique em Salvar.

Agora é necessário reiniciar o WebLogic Server para que essas alterações tenham efeito. Após o reinício, acesse novamente o Console de Administração para verificar se a configuração foi feita corretamente. Para isso, acesse o menu em árvore e navegue até Realms de Segurança > myrealm > Provedores > Usuários e Grupos. Note que os usuários user1 e user2 aparecem na listagem.

Pronto! Todas as configurações necessárias no WebLogic Server foram feitas! Agora vamos apenas fazer o mapeamento dos grupos na aplicação WebCenter Portal.

Abra o arquivo jazn-data.xml e na aba Enterprise Roles crie roles com os mesmos nomes dos grupos criados no banco de dados.

Na aba Application Roles, crie as roles necessárias para o projeto, e na seção Mappings, adicione as Enterprises Roles criadas.

Altere uma opção no Security Deployment pois não queremos que os usuários e grupos criados no WebCenter sejam propagados para o WebLogic Server. No Jdeveloper, acesse Application > Secure > Configure Security Deployment e desmarque a opção Users and Groups.

É possível utilizar dois arquivos para definir as permissões de acesso utilizando as roles criadas: pages.xml e jazn-data.xml.

pages.xml: Esse arquivo define a estrutura de navegação do portal, e aqui as permissões podem ser herdadas de pai pra filho, ou não. Esse arquivo só contém páginas.

Para realizarmos o teste das permissões, criei as páginas userPage.jspx, adminPage.jspx e adminUserPage.jspx, e as adicionei no pages.xml.

As permissões foram definidas da seguinte maneira:

  • userPage.jspx: userRole -> view
  • adminPage.jspx: adminRole -> view
  • adminUserPage.jspx: userRole → view, adminRole → view

 

jazn-data.xml: Na aba Resource Grants desse arquivo, são definidas as permissões para todos os outros arquivos, como por exemplo, páginas que não estejam associadas ao arquivo pages.xml, task flows, etc.

Para realizarmos o teste das permissões, criei a Task Flow DepartmentTaskFlow, adicionei ao projeto Portal e adicionei a permissão de visualização para a role adminRole. Assim, só o usuário associado a role adminRole irá visualizar esse Task Flow.

Adicionei o Task Flow como region na página adminUserPage.jspx. As duas roles têm permissão de visualização dessa página, mas apenas a role adminRole irá visualizar o Task Flow na página.

Pronto, vamos testar a aplicação! Acessando com o usuário user1, as páginas adminPage e adminUserPage irão aparecer no menu.

Como o user1 é do grupo weblogic-admin, o Task Flow aparece na página adminUserPage.

Acessando com o usuário user2, as páginas userPage e adminUserPage irão aparecer no menu.

Como o user2 é do grupo weblogic-user, o Task Flow não aparece na página adminUserPage.

Waslley Souza é Consultor Oracle com foco em tecnologias Oracle Fusion Middleware e SOA. Pós-graduado em Engenharia de Software (SOA) e bacharel em Ciências da Computação. Certificado Oracle WebCenter Portal, Oracle ADF e Java. Siga Waslley Souza em seu blog .

Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.