Estou com problema quando criando por exemplo 3 Grupos e dar acesso a 2 deles, o acesso é liberado apenas para o primeiro grupo defino para o usuário. Alguém poderia fazer um teste.
Obs. Aplicação de segurança criada pelo SC
Grato
André
Estou com problema quando criando por exemplo 3 Grupos e dar acesso a 2 deles, o acesso é liberado apenas para o primeiro grupo defino para o usuário. Alguém poderia fazer um teste.
Obs. Aplicação de segurança criada pelo SC
Grato
André
Bom dia André,
Este problema vem acontecendo apenas com aplicações de controle, ou o problema está acontecendo independente do tipo de app?
att,
Bernhard Bernsmann
Bernhard, o problema esta ocorrendo com qualquer app.
Esta dando permissão apenas para o ultimo registro da tabela sec_users_groups.
Segue código (lembrando que esta app de segurança é gerada pelo próprio SC)
$sql = “SELECT app_name, priv_access, priv_insert, priv_delete, priv_update,
priv_export, priv_print
FROM dbo.sec_groups_apps
WHERE group_id IN
(SELECT group_id
FROM dbo.sec_users_groups
WHERE login = '”. [usr_login] ."’)";
sc_select(rs, $sql);
if ({rs} !== false)
{
while (!$rs->EOF)
{
if( $rs->fields[1] == ‘Y’ ||
$rs->fields[2] == ‘Y’ ||
$rs->fields[3] == ‘Y’ ||
$rs->fields[4] == ‘Y’ ||
$rs->fields[5] == ‘Y’ ||
$rs->fields[6] == ‘Y’)
{
sc_apl_status($rs->fields[0], ‘on’);
}
else
{
sc_apl_status($rs->fields[0], ‘off’);
}
sc_apl_conf($rs->fields[0], 'access', has_priv($rs->fields[1]));
sc_apl_conf($rs->fields[0], 'insert', has_priv($rs->fields[2]));
sc_apl_conf($rs->fields[0], 'delete', has_priv($rs->fields[3]));
sc_apl_conf($rs->fields[0], 'update', has_priv($rs->fields[4]));
//export
$export_permission = 'btn_display_'. has_priv($rs->fields[5]);
sc_apl_conf($rs->fields[0], $export_permission, 'xls');
sc_apl_conf($rs->fields[0], $export_permission, 'word');
sc_apl_conf($rs->fields[0], $export_permission, 'pdf');
sc_apl_conf($rs->fields[0], $export_permission, 'xml');
sc_apl_conf($rs->fields[0], $export_permission, 'csv');
sc_apl_conf($rs->fields[0], $export_permission, 'rtf');
//export
$export_permission = 'btn_display_'. has_priv($rs->fields[6]);
sc_apl_conf($rs->fields[0], $export_permission, 'print');
$rs->MoveNext();
}
$rs->Close();
sc_redir('mnu_Principal_SGI');
}
Grato
Boa noite,
Reportei este problema para que nossa equipe de bugs.
att,
Bernhard Bernsmann
Bernhard, ainda não consigo dar permissão para um usuário, num sistema que tenha 2 grupos ou mais:
Por exemplo:
Grupos: Vendas, Faturamento e Financeiro
Se der permissão ao usuário nos grupos Faturamento e Financeiro, o SC libera apenas o Faturamento.
Estou tendo que dar permissão como admin (acessa todos os módulos).
Poderia verificar.
{
sc_apl_status($rs->fields[0], 'on');
}
else
{
sc_apl_status($rs->fields[0], 'off');
}
Creio que seu problema está nesta linha de código acima meu amigo. O que acontece, você libera uma app em um grupo já no outro grupo a mesma é bloqueada, então sempre pegará a definição do último grupo.
Oque terá que fazer, antes de comecar a validar usar o sc_reset_apl_status(), depois execute apenas a -> sc_apl_status($rs->fields[0], ‘on’);, liberando as apps liberadas e pois as outras estarão bloqueadas por padrão…
Espero ter lhe ajudado
Pra separar do jeito que você esta querendo você terá que mexer no esquema de segurança do SC, quando se fala em permissões por grupos no SC entende-se que se deve definir em cada grupo todas as aplicações que aquele determinado grupo terá acesso, não é pra separar Grupos de Aplicações e sim grupos de usuários.
Pra ter essa separação por grupos de aplicações você terá que criar pelo menos mais três tabelas pra conseguir relacionar aplicações com os grupos de aplicações e os grupos de aplicações aos grupos de usuários.
Confuso né…!! Mas só assim pra funcionar…
No meu caso tenho o scritpcase usando a segurança que é gerada por ele, crio vários grupos, e funciona perfeitamente, só que em todos os grupos tem todas as app para serem liberadas ou não.
Almeida, é exatamente o que estou fazendo (igual a você)
Este é o código que o SC esta gerando, você fez alguma alteração nele?
$sql = “SELECT
app_name,
priv_access,
priv_insert,
priv_delete,
priv_update,
priv_export,
priv_print
FROM dbo.sec_groups_apps
WHERE group_id IN
(SELECT
group_id
FROM
dbo.sec_users_groups
WHERE
login = '”. [usr_login] ."’)";
sc_select(rs, $sql);
if ({rs} !== false)
{
while (!$rs->EOF)
{
if( $rs->fields[1] == ‘Y’)
{
sc_apl_status($rs->fields[0], ‘on’);
}
else
{
sc_apl_status($rs->fields[0], ‘off’);
}
sc_apl_conf($rs->fields[0], 'insert', has_priv($rs->fields[2]));
sc_apl_conf($rs->fields[0], 'delete', has_priv($rs->fields[3]));
sc_apl_conf($rs->fields[0], 'update', has_priv($rs->fields[4]));
//export
$export_permission = 'btn_display_'. has_priv($rs->fields[5]);
sc_apl_conf($rs->fields[0], $export_permission, 'xls');
sc_apl_conf($rs->fields[0], $export_permission, 'word');
sc_apl_conf($rs->fields[0], $export_permission, 'pdf');
sc_apl_conf($rs->fields[0], $export_permission, 'xml');
sc_apl_conf($rs->fields[0], $export_permission, 'csv');
sc_apl_conf($rs->fields[0], $export_permission, 'rtf');
//export
$export_permission = 'btn_display_'. has_priv($rs->fields[6]);
sc_apl_conf($rs->fields[0], $export_permission, 'print');
$rs->MoveNext();
}
$rs->Close();
if(sc_logged({login})):
sc_log_add('login', {lang_login_ok});
sc_user_logout('logged_user', 'logout', 'Login');
sc_redir('mnu_Principal_SGI');
endif;
}
dellapiazza, tente usar esse código que lhe informo abaixo, não o testei apenas fiz aqui mesmo usando minha lógica,
esse código apenas liberará aplicações, não bloqueia às, então todas as APPS tem que estar com segurança SIM no scriptcase,
as que tiverem com segurança NÃO serão liberadas. Se precisar de um código que bloqueie às faça uma lógica em cima dessa que lhe passei, qualquer coisa se precisar de ajuda estou aqui para tentar ajudar no que sei…
[code]
sc_reset_apl_status();
sc_reset_apl_conf();
$sql = “SELECT
app_name,
priv_access,
priv_insert,
priv_delete,
priv_update,
priv_export,
priv_print
FROM dbo.sec_groups_apps
WHERE group_id IN
(SELECT
group_id
FROM
dbo.sec_users_groups
WHERE
login = '”. [usr_login] ."’)";
sc_select(rs, $sql);
if ({rs} !== false)
{
while (!$rs->EOF)
{
if($rs->fields[1] == ‘Y’)
{
sc_apl_status($rs->fields[0], ‘on’);
}
if(has_priv($rs->fields[2]) == "on"){
sc_apl_conf($rs->fields[0], 'insert', "on");
}
if(has_priv($rs->fields[3]) == "on"){
sc_apl_conf($rs->fields[0], 'delete', "on");
}
if(has_priv($rs->fields[4]) == "on"){
sc_apl_conf($rs->fields[0], 'update', "on");
}
//export
if(has_priv($rs->fields[5]) == "on"){
$export_permission = 'btn_display_'. has_priv($rs->fields[5]);
sc_apl_conf($rs->fields[0], $export_permission, 'xls');
sc_apl_conf($rs->fields[0], $export_permission, 'word');
sc_apl_conf($rs->fields[0], $export_permission, 'pdf');
sc_apl_conf($rs->fields[0], $export_permission, 'xml');
sc_apl_conf($rs->fields[0], $export_permission, 'csv');
sc_apl_conf($rs->fields[0], $export_permission, 'rtf');
}
//export
if(has_priv($rs->fields[6]) == "on"){
$export_permission = 'btn_display_'. has_priv($rs->fields[6]);
sc_apl_conf($rs->fields[0], $export_permission, 'print');
}
$rs->MoveNext();
}
$rs->Close();
if(sc_logged({login})):
sc_log_add(‘login’, {lang_login_ok});
sc_user_logout(‘logged_user’, ‘logout’, ‘Login’);
sc_redir(‘mnu_Principal_SGI’);
endif;
}[/code]
Almeida, código APROVADO, funcionou perfeitinho.
Estava com este problema a muito tempo. MUITO OBRIGADO MESMO…
Obrigado também ao nosso amigo Saulo.
Deus abençoe a todos.
Almeida, não entendi muito bem sua explicação.
Eu uso Grupos pelo código gerado no SC… logo quando 1(um) usuario participa de 2(dois) grupos apenas um deles é liberado…
Fazendo essa modificação como tenho que comportar com as lberações de apps por grupo ? em todas as minhas app eu marquei SIm em segurança…
A segurança do SC até na versão que eu utilizei, estava executando a liberação dos grupos repetidamente, independente se estava liberando ou bloqueando. Então se você liberava uma app em um grupo e em outro bloqueava, prevalecia o útlimo.
Oque eu auxiliei nosso amigo a fazer foi verificar antes de cada liberação se erá uma liberaçao(on), se fosse liberava, se não fosse não fazia nada, deixava como esta.
Ex:
while(apps){
if($variavel == “on”) //liberar
//então libera a app;
}
Isso em liberar apps e liberar botões.
de uma analisada no código, qualquer coisa poste aqui seu código que dou uma olhada.
Abraco
Almeida, desculpe-me a demora mas tive que parar um pouco por conta do nascimento de minhas gêmeas…
meu código está assim…
[code]sc_reset_apl_status();
sc_reset_apl_conf();
$sql = “SELECT
app_name,
priv_access,
priv_insert,
priv_delete,
priv_update,
priv_export,
priv_print
FROM dbo.seguranca_groups_apps
WHERE group_id IN
(SELECT
group_id
FROM
dbo.seguranca_users_groups
WHERE
login = '”. [usr_login] ."’)";
sc_select(rs, $sql);
if ({rs} !== false)
{
while (!$rs->EOF)
{
if( $rs->fields[1] == ‘Y’ ||
$rs->fields[2] == ‘Y’ ||
$rs->fields[3] == ‘Y’ ||
$rs->fields[4] == ‘Y’ ||
$rs->fields[5] == ‘Y’ ||
$rs->fields[6] == ‘Y’)
{
sc_apl_status($rs->fields[0], ‘on’);
}
else
{
sc_apl_status($rs->fields[0], ‘off’);
}
sc_apl_conf($rs->fields[0], 'access', has_priv($rs->fields[1]));
sc_apl_conf($rs->fields[0], 'insert', has_priv($rs->fields[2]));
sc_apl_conf($rs->fields[0], 'delete', has_priv($rs->fields[3]));
sc_apl_conf($rs->fields[0], 'update', has_priv($rs->fields[4]));
//export
$export_permission = 'btn_display_'. has_priv($rs->fields[5]);
sc_apl_conf($rs->fields[0], $export_permission, 'xls');
sc_apl_conf($rs->fields[0], $export_permission, 'word');
sc_apl_conf($rs->fields[0], $export_permission, 'pdf');
sc_apl_conf($rs->fields[0], $export_permission, 'xml');
sc_apl_conf($rs->fields[0], $export_permission, 'csv');
sc_apl_conf($rs->fields[0], $export_permission, 'rtf');
//export
$export_permission = 'btn_display_'. has_priv($rs->fields[6]);
sc_apl_conf($rs->fields[0], $export_permission, 'print');
$rs->MoveNext();
}
$rs->Close();
if(sc_logged({login})):
sc_log_add('login', {lang_login_ok});
sc_user_logout('logged_user', 'logout', 'login_obras');
sc_redir('menu_obras');
endif;
}[/code]
Usando esse exemplo que passei logo acima não funcionou no seu caso não?
Pois verificando seu código é igual ao anterior do nosso amigo.
Sequer logou…
tente esse então:
[code]
sc_reset_apl_status();
sc_reset_apl_conf();
$sql = “SELECT
app_name,
priv_access,
priv_insert,
priv_delete,
priv_update,
priv_export,
priv_print
FROM dbo.sec_groups_apps
WHERE group_id IN
(SELECT
group_id
FROM
dbo.sec_users_groups
WHERE
login = '”. [usr_login] ."’)";
sc_select(rs, $sql);
if ({rs} !== false)
{
while (!$rs->EOF)
{
if($rs->fields[1] == ‘Y’)
{
sc_apl_status($rs->fields[0], ‘on’);
}
if(has_priv($rs->fields[2]) == "on"){
sc_apl_conf($rs->fields[0], 'insert', "on");
}
if(has_priv($rs->fields[3]) == "on"){
sc_apl_conf($rs->fields[0], 'delete', "on");
}
if(has_priv($rs->fields[4]) == "on"){
sc_apl_conf($rs->fields[0], 'update', "on");
}
//export
if(has_priv($rs->fields[5]) == "on"){
$export_permission = 'btn_display_'. has_priv($rs->fields[5]);
sc_apl_conf($rs->fields[0], $export_permission, 'xls');
sc_apl_conf($rs->fields[0], $export_permission, 'word');
sc_apl_conf($rs->fields[0], $export_permission, 'pdf');
sc_apl_conf($rs->fields[0], $export_permission, 'xml');
sc_apl_conf($rs->fields[0], $export_permission, 'csv');
sc_apl_conf($rs->fields[0], $export_permission, 'rtf');
}
//export
if(has_priv($rs->fields[6]) == "on"){
$export_permission = 'btn_display_'. has_priv($rs->fields[6]);
sc_apl_conf($rs->fields[0], $export_permission, 'print');
}
$rs->MoveNext();
}
$rs->Close();
if(sc_logged({login})):
sc_log_add(‘login’, {lang_login_ok});
sc_user_logout(‘logged_user’, ‘logout’, ‘Login’);
sc_redir(‘menu_obras’);
endif;
}[/code]
Mas foi justamente esse que tentei…
o que mandei é o que funciona…mas apenas com 1 grupo…
Verifiquei o código está ok, não encontrei prbolema…
Coloca em modo debug e tira o sc_redir do final do código, vamos ver se vai apresentar algum erro.
Meu código esta igual e está funcionando com vários grupos.