Saudações, família Scriptcase.
Estou o dia todo a trabalhar num sistema para criar restrição de acesso a determinados grupos do módulo de segurança.
Vou explicar o que pretendo que o sistema faça:
Imaginemos que uma escola estabeleça que as provas devam ser realizadas do dia data_um ao dia data_dois. Quando chegar o dia data_dois só os administrativos da escola e os administradores do sistema podem ter acesso.
Criei a seguinte lógica no evento onValidade:
if (sc_logged_is_blocked()) {
sc_error_exit();
}
$slogin = sc_sql_injection({login});
$spswd = sc_sql_injection(hash(“md5”, {pswd}));
$data_actual = new DateTime();
sc_lookup(rs, “SELECT duracao_dois FROM duracao_avaliacao WHERE id=(SELECT MAX(id) FROM duracao_avaliacao)”);
if (!empty({rs})) {
$data_limite = {rs[0][0]};
} else {
$data_limite = NULL;
}
$query = “SELECT group_id FROM sec_users_groups WHERE login = $slogin”; // Substitua 1 pelo ID do grupo administrativo no seu sistema
sc_lookup(rs, $query);
if (!empty({rs})) {
$grupo = {rs[0][0]};
} else {
// Se o contador for maior que zero, o usuário pertence ao grupo administrativo
$grupo = NULL;
}
//$grupo = getGrupo($slogin);
if ($data_actual > $data_limite) {
if ($grupo == 1 || $grupo == 5 || $grupo == 6) {
// Usuário pertence ao grupo administrativo, chefe de departamento ou liderados, permita o acesso completo.
sc_redir(‘menu’);
} else {
// Usuário não pertence a nenhum dos grupos permitidos, bloqueie o acesso.
// Redireciona para a página que avisa que o período já passou
sc_redir(‘blank_fim_avaliacao’);
}
} else {
// Horário de acesso ainda não expirou, permita o acesso normal.
sc_redir(‘menu’);
}
$sql = “SELECT
priv_admin,
active,
name,
email
FROM sec_users
WHERE login = $slogin
AND pswd = “.$spswd.””;
sc_lookup(rs, $sql);
if (count({rs}) == 0) {
sc_log_add('login Fail', {lang_login_fail} . {login});
sc_logged_in_fail({login});
sc_error_message({lang_error_login});
} else if ({rs[0][1]} == 'Y') {
$usr_login = {login};
$usr_priv_admin = ({rs[0][0]} == 'Y') ? TRUE : FALSE;
$usr_name = {rs[0][2]};
$usr_email = {rs[0][3]};
sc_set_global($usr_login);
sc_set_global($usr_priv_admin);
sc_set_global($usr_name);
sc_set_global($usr_email);
} else {
sc_error_message({lang_error_not_active});
sc_error_exit();
}
O problema é que qualquer usuário ao tentar entrar cai à página que diz que o período expirou.
Obs.: Os grupos 1, 5 e 6 são que devem ter sempre acesso ao sistema.