Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

darlansandro

Varios Niveis de acesso para o usuario em paginas diferentes

Recommended Posts

Olá, estou criando um aplicativo em php e preciso que um unico usuario possa ter varios niveis de acesso. O acesso deverá ser por pagina. Tenho uma pagina que posssui um cadastro de colaboradores, outra que possui um formulario para editar estes colaboradores, outra que possui um formulario de exclusão de colaboradores e uma outra que é possivel visualizar os colaboradores cadastrados. Desta forma gostaria que no momento do cadastro do usuario pudesse definir o acesso separado para ele, por exemplo se marcasse a opção 1 no formulario de acesso daria permissão para consulta na pagina de cadastro de colaboradores, se marcasse a opção 3, permissão para consulta na pagina de visualização dos colaboradores e assim sucessivamente. Para isso criei duas tabelas, usuario e acesso, e liguei as tabelas na pagina que possui o formulario de autenticação:

 

Tabela 1 (Usuarios):

 

--

-- Estrutura da tabela `usuarios`

--

 

CREATE TABLE IF NOT EXISTS `usuarios` (

`usu_id` int(100) unsigned NOT NULL auto_increment,

`usu_e_id` char(20) default NULL,

`usu_nome` varchar(100) NOT NULL default '',

`usu_email` varchar(100) NOT NULL default '',

`usu_senha` varchar(32) NOT NULL default '',

`usu_chave` varchar(32) NOT NULL default '',

`usu_nivel` set('1','2','3') NOT NULL,

`usu_data` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,

PRIMARY KEY (`usu_id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 PACK_KEYS=0 COMMENT='Usuarios do site' AUTO_INCREMENT=3 ;

 

--

-- Extraindo dados da tabela `usuarios`

--

 

INSERT INTO `usuarios` (`usu_id`, `usu_e_id`, `usu_nome`, `usu_email`, `usu_senha`, `usu_chave`, `usu_nivel`, `usu_data`) VALUES

(1, '1', '1', 'darlansandro@hotmail.com', 'd283aae29f6d643c61bad41f39c46544', '1f0f09a5039f1696e21f107f5098df4e', '1,2,3', '2010-11-07 10:12:38');

 

 

Tabela 2 (Acesso):

 

-- Estrutura da tabela `acesso`

--

 

CREATE TABLE IF NOT EXISTS `acesso` (

`ac_id` int(20) NOT NULL auto_increment,

`ac_usu_id` char(20) NOT NULL,

`ac_ac` set('1','2') NOT NULL,

PRIMARY KEY (`ac_id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Nível de Acesso' AUTO_INCREMENT=3 ;

 

--

-- Extraindo dados da tabela `acesso`

--

 

INSERT INTO `acesso` (`ac_id`, `ac_usu_id`, `ac_ac`) VALUES

(1, '1', '1'),

(2, '1', '2');

 

Formulario de autenticação do usuario:

 

<?php

// *** Validate request to login to this site.

if (!isset($_SESSION)) {

session_start();

}

 

$loginFormAction = $_SERVER['PHP_SELF'];

if (isset($_GET['accesscheck'])) {

$_SESSION['PrevUrl'] = $_GET['accesscheck'];

}

 

if (isset($_POST['usu_email'])) {

$loginUsername=$_POST['usu_email'];

$password=md5($_POST['usu_senha']);

$MM_fldUserAuthorization = "ac_ac";

$MM_redirectLoginSuccess = "administrador/index.php";

$MM_redirectLoginFailed = "intranet.php";

$MM_redirecttoReferrer = true;

mysql_select_db($database_banco, $banco);

 

$LoginRS__query=sprintf("SELECT usu_email, usu_senha, ac_usu_id, ac_ac FROM usuarios,acesso WHERE usu_email=%s AND usu_senha=%s AND usu_id=ac_usu_id",

GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));

 

$LoginRS = mysql_query($LoginRS__query, $banco) or die(mysql_error());

$loginFoundUser = mysql_num_rows($LoginRS);

if ($loginFoundUser) {

 

$loginStrGroup = mysql_result($LoginRS,0,'ac_ac');

 

//declare two session variables and assign them

$_SESSION['MM_Username'] = $loginUsername;

$_SESSION['MM_UserGroup'] = $loginStrGroup;

 

if (isset($_SESSION['PrevUrl']) && true) {

$MM_redirectLoginSuccess = $_SESSION['PrevUrl'];

}

header("Location: " . $MM_redirectLoginSuccess );

}

else {

header("Location: ". $MM_redirectLoginFailed );

}

}

?>

 

Para cada pagina o acesso esta o seguinte:

 

<?php

if (!isset($_SESSION)) {

session_start();

}

$MM_authorizedUsers = "2";

$MM_donotCheckaccess = "false";

 

// *** Restrict Access To Page: Grant or deny access to this page

function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) {

// For security, start by assuming the visitor is NOT authorized.

$isValid = False;

 

// When a visitor has logged into this site, the Session variable MM_Username set equal to their username.

// Therefore, we know that a user is NOT logged in if that Session variable is blank.

if (!empty($UserName)) {

// Besides being logged in, you may restrict access to only certain users based on an ID established when they login.

// Parse the strings into arrays.

$arrUsers = Explode(",", $strUsers);

$arrGroups = Explode(",", $strGroups);

if (in_array($UserName, $arrUsers)) {

$isValid = true;

}

// Or, you may restrict access to only certain users based on their username.

if (in_array($UserGroup, $arrGroups)) {

$isValid = true;

}

if (($strUsers == "") && false) {

$isValid = true;

}

}

return $isValid;

}

 

$MM_restrictGoTo = "acessonegado.php";

if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) {

$MM_qsChar = "?";

$MM_referrer = $_SERVER['PHP_SELF'];

if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&";

if (isset($QUERY_STRING) && strlen($QUERY_STRING) > 0)

$MM_referrer .= "?" . $QUERY_STRING;

$MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer);

header("Location: ". $MM_restrictGoTo);

exit;

}

?>

 

 

Agradeço desde já a ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, estou criando um aplicativo em php e preciso que um unico usuario possa ter varios niveis de acesso. O acesso deverá ser por pagina. Tenho uma pagina que posssui um cadastro de colaboradores, outra que possui um formulario para editar estes colaboradores, outra que possui um formulario de exclusão de colaboradores e uma outra que é possivel visualizar os colaboradores cadastrados. Desta forma gostaria que no momento do cadastro do usuario pudesse definir o acesso separado para ele, por exemplo se marcasse a opção 1 no formulario de acesso daria permissão para consulta na pagina de cadastro de colaboradores, se marcasse a opção 3, permissão para consulta na pagina de visualização dos colaboradores e assim sucessivamente. Para isso criei duas tabelas, usuario e acesso, e liguei as tabelas na pagina que possui o formulario de autenticação:

 

Tabela 1 (Usuarios):

 


--
-- Estrutura da tabela `usuarios`
--

CREATE TABLE IF NOT EXISTS `usuarios` (
`usu_id` int(100) unsigned NOT NULL auto_increment,
`usu_e_id` char(20) default NULL,
`usu_nome` varchar(100) NOT NULL default '',
`usu_email` varchar(100) NOT NULL default '',
`usu_senha` varchar(32) NOT NULL default '',
`usu_chave` varchar(32) NOT NULL default '',
`usu_nivel` set('1','2','3') NOT NULL,
`usu_data` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`usu_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 PACK_KEYS=0 COMMENT='Usuarios do site' AUTO_INCREMENT=3 ;

--
-- Extraindo dados da tabela `usuarios`
--

INSERT INTO `usuarios` (`usu_id`, `usu_e_id`, `usu_nome`, `usu_email`, `usu_senha`, `usu_chave`, `usu_nivel`, `usu_data`) VALUES
(1, '1', '1', 'darlansandro@hotmail.com', 'd283aae29f6d643c61bad41f39c46544', '1f0f09a5039f1696e21f107f5098df4e', '1,2,3', '2010-11-07 10:12:38');

Tabela 2 (Acesso):

 

-- Estrutura da tabela `acesso`
--

CREATE TABLE IF NOT EXISTS `acesso` (
`ac_id` int(20) NOT NULL auto_increment,
`ac_usu_id` char(20) NOT NULL,
`ac_ac` set('1','2') NOT NULL,
PRIMARY KEY (`ac_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Nível de Acesso' AUTO_INCREMENT=3 ;

--
-- Extraindo dados da tabela `acesso`
--

INSERT INTO `acesso` (`ac_id`, `ac_usu_id`, `ac_ac`) VALUES
(1, '1', '1'),
(2, '1', '2');

Formulario de autenticação do usuario:

<?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
session_start();
}

$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
$_SESSION['PrevUrl'] = $_GET['accesscheck'];
}

if (isset($_POST['usu_email'])) {
$loginUsername=$_POST['usu_email'];
$password=md5($_POST['usu_senha']);
$MM_fldUserAuthorization = "ac_ac";
$MM_redirectLoginSuccess = "administrador/index.php";
$MM_redirectLoginFailed = "intranet.php";
$MM_redirecttoReferrer = true;
mysql_select_db($database_banco, $banco);

$LoginRS__query=sprintf("SELECT usu_email, usu_senha, ac_usu_id, ac_ac FROM usuarios,acesso WHERE usu_email=%s AND usu_senha=%s AND usu_id=ac_usu_id",
GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text")); 

$LoginRS = mysql_query($LoginRS__query, $banco) or die(mysql_error());
$loginFoundUser = mysql_num_rows($LoginRS);
if ($loginFoundUser) {

$loginStrGroup = mysql_result($LoginRS,0,'ac_ac');

//declare two session variables and assign them
$_SESSION['MM_Username'] = $loginUsername;
$_SESSION['MM_UserGroup'] = $loginStrGroup; 

if (isset($_SESSION['PrevUrl']) && true) {
$MM_redirectLoginSuccess = $_SESSION['PrevUrl']; 
}
header("Location: " . $MM_redirectLoginSuccess );
}
else {
header("Location: ". $MM_redirectLoginFailed );
}
}
?>

Para cada pagina o acesso esta o seguinte:

 


<?php
if (!isset($_SESSION)) {
session_start();
}
$MM_authorizedUsers = "2";
$MM_donotCheckaccess = "false";

// *** Restrict Access To Page: Grant or deny access to this page
function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { 
// For security, start by assuming the visitor is NOT authorized. 
$isValid = False; 

// When a visitor has logged into this site, the Session variable MM_Username set equal to their username. 
// Therefore, we know that a user is NOT logged in if that Session variable is blank. 
if (!empty($UserName)) { 
// Besides being logged in, you may restrict access to only certain users based on an ID established when they login. 
// Parse the strings into arrays. 
$arrUsers = Explode(",", $strUsers); 
$arrGroups = Explode(",", $strGroups); 
if (in_array($UserName, $arrUsers)) { 
$isValid = true; 
} 
// Or, you may restrict access to only certain users based on their username. 
if (in_array($UserGroup, $arrGroups)) { 
$isValid = true; 
} 
if (($strUsers == "") && false) { 
$isValid = true; 
} 
} 
return $isValid; 
}

$MM_restrictGoTo = "acessonegado.php";
if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) { 
$MM_qsChar = "?";
$MM_referrer = $_SERVER['PHP_SELF'];
if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&";
if (isset($QUERY_STRING) && strlen($QUERY_STRING) > 0) 
$MM_referrer .= "?" . $QUERY_STRING;
$MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer);
header("Location: ". $MM_restrictGoTo); 
exit;
}
?>

Agradeço desde já a ajuda.

 

Galera, alguem pode me da uma ajuda até agora não conseguir resolver o problema.

 

Galera, ninguem pode me da uma luz com este problema? Agradeço qualquer ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.