Controle de acesso dinamico

Boa tarde, hoje no meu sistema eu faço o gerenciamento de quem pode acessar o que da seguinte maneira:

if ([nivel] == “ADMINISTRADOR”)
{
sc_reset_menu_delete();
}
else if ([nivel] == “USUARIO PRIVI.”)
{
sc_menu_delete(item_9);
sc_menu_delete(item_1);
}
else if ([nivel] == “USUARIO NORMAL”)
{
sc_menu_delete(item_17);
sc_menu_delete(item_2);
}
else
sc_reset_menu_delete();

Ok, serviu muito bem pra mim. Porém agora eu preciso fazer com que o administrador, aquele que vai criar a conta de todos os usuários sete manualmente quais abas do programa o usuário podera ver e utilizar… Não tenho ideia de como fazer isso, alguém pode me ajudar?

Use o próprio modulo de segurança do SC.
No meu Módulos / Segurança
http://support.scriptcase.net/index.php?/Knowledgebase/Article/View/547/5/modulo-de-seguranca

Nesse seu código tem uma desvantagem. Não funciona no ambiente mobile. Eu antes tratava a segurança de menus por usuários desta mesma forma. Quando percebi, não funcionava quando o usuário acessava pelo celular. Fica a dica.

Valeu galera, vou tentar o modulo de segurança aqui e já retorno.

Então, o esquema de segurança não me ajudou muito… estava tentando fazer isso:

sc_lookup(ds, “SELECT cadastro_visivel, alterar_visivel, importar_visivel, consultar_visivel, cadastrar_usu_visivel FROM nivel WHERE (nivel = ‘[nivel_usu]’)”);

$cadastro = {ds[0][0]};
$alterar = {ds[0][1]};
$importar = {ds[0][2]};
$consultar = {ds[0][3]};
$cadastrar_usu = {ds[0][4]};

if($cadastro = ‘1’){
sc_menu_delete(item_2);
}
// e assim por diante;

mas eu coloco isso no menu, no onLoad e não abre a aplicação, porque sera?

Apesar do esquema de segurança do sc ter melhorado, não é uma uma solução ideal.

Estude os comandos dinâmicos do menu.

Bom dia Haroldo. Não entendi direito, desculpa a ignorância. Esse código que eu postei acima não tem nada a ver com o modulo de segurança, estou fazendo na mão mesmo, só que não consigo fazer rodar no evento onLoad do menu… Acho que me expressei errado, perdão. Você tem alguma noção do porque? Não acho em nenhum lugar. Obrigado pela atenção desde já.

Eu uso uma configuração baseada no módulo de segurança do sc porém fiz minhas customizações e o menu prefiro montar dinâmico, assim nunca tive problemas.

É na mão mesmo que aconselho a fazer, usando os comando de menu dinâmico.

Menu
sc_appmenu_add_item (“Menu_Nome”, “Id_Item”, “Id_Pai”, “Label”, “Aplicação”, “Parâmetro”, “Icone”, “Hint”, “Target”)
Esta macro adiciona um item ao menu dinamicamente.

sc_appmenu_create (“Menu_Nome”)
Esta macro cria um menu de forma dinâmica.

sc_appmenu_exist_item (“Menu_Nome”, “Id_Item”)
Esta Macro verifica se existe um item do menu.

sc_appmenu_remove_item (“Menu_Nome”, “Id_Item”)
Esta macro remove dinamicamente um item do menu.

sc_appmenu_reset (“Menu_Nome”)
Esta macro limpa o array para montagem dinâmica de um menu.

sc_appmenu_update_item (“Menu_Nome”, “Id_Item”, “Id_Pai”, “Label”, “Aplicação”, “Parâmetro”, “Icone”, “Hint”, “Target”)
Esta macro atualiza um item do menu.

Eu uso a segurança do SC nativa, ate agora não tive problemas ate então.

sc_lookup(ds2, "SELECT cadastro_visivel, alterar_visivel, importar_visivel, consultar_visivel, cadastrar_usu_visivel FROM nivel WHERE (nivel = ".$nivel.")");

$cadastro = {ds2[0][0]};
$alterar = {ds2[0][1]};
$importar = {ds2[0][2]};
$consultar = {ds2[0][3]};
$cadastrar_usu = {ds2[0][4]};

$cadastro = [cadastro];
$alterar = [alterar];
$importar = [importar];
$consultar = [consultar];
$cadastrar_usu = [cad_usu];

Está correto isso? Eu to pegando o valor que ta no campo selecionado e jogando em uma variavel global, uma pra cada campo, ta correto?

Não está correto.

Sou muito novo em scriptcase, estou desde manhã tentando resolver isso, mas não acho como fazer. Alguem poderia me dar uma luz? Perdão se estou sendo muito repetitivo no tópico.

[cadastro] = {ds2[0][0]};
[alterar] = {ds2[0][1]};
[importar] = {ds2[0][2]};
[consultar] = {ds2[0][3]};
[cad_usu] = {ds2[0][4]};

Em aplicações/variáveis globais: habilite como sessão

Haroldo, muito obrigado mesmo pela paciência e ajuda, estou tentando aqui mas acho que faço algo errado… No Login, eu faço o seguinte:

sc_lookup(ds, $sql);

if (isset({ds[0][0]})){
$nivel = {ds[0][2]};
sc_lookup(ds2, “SELECT cadastro_visivel, alterar_visivel, importar_visivel, consultar_visivel, cadastrar_usu_visivel FROM nivel WHERE (nivel = “.$nivel.”)”);
[cadastro] = {ds2[0][0]};
[alterar] = {ds2[0][1]};
[importar] = {ds2[0][2]};
[consultar] = {ds2[0][3]};
[cad_usu] = {ds2[0][4]};
sc_redir(Menu_cct);
}
else {
sc_error_message(“Dados inválidos”);
}

E no menu, eu faço o seguinte:

if ([cadastro] == ‘1’)
{
sc_menu_delete(item_2);
}
else if ([alterar] == ‘1’)
{
sc_menu_delete(item_9);
}

De modo que, ele procure no banco qual é o nivel, e se o valor for 1, ele desabilitará o item do menu em questão… Porém não vai nem com ferro, ele continua abrindo o menu inteiro, sem tirar os itens que eu defini… venho pesquisando faz uma cota já, não sei mais como fazer, voce poderia se possível me dar alguma ideia?

Consegui resolver, era um erro de sintaxe mesmo… Valeu galera!