fetchFirstNoLog($sql)) { $_SESSION['ADM_ID'] = $userInfo['ADM_ID']; $_SESSION['ADM_INICJALY_HANDLOWCA'] = $userInfo['ADM_INICJALY_HANDLOWCA']; $_SESSION['EMPLOYEE_TYPE'] = $userInfo['EMPLOYEE_TYPE']; $_SESSION['DEFAULT_ACL_GROUP'] = $userInfo['DEFAULT_ACL_GROUP']; return $userInfo; } return []; } public static function logged() { return (!empty($_SESSION['AUTHORIZE_USER']))? true : false; } public static function get( $key ) { return V::get($key, '', $_SESSION); } public static function getGroups() { $groups = User::_fetchGroups(); return $groups; } public static function getGroupsIds() { $groups = User::_fetchGroups(); return array_keys($groups); } public static function _fetchGroups() { static $_groups; if (!$_groups) { $user_id = User::getID(); Lib::loadClass('UsersHelper'); $_groups = UsersHelper::getGroupByUser($user_id); } return $_groups; } public static function loadProfile($force = false) { return UserProfile::load($force); } public static function saveProfile() { return UserProfile::save(); } public static function getProfile($key) { return UserProfile::get($key); } public static function setProfile($key, $val) { UserProfile::set($key, $val); } public static function getProfileColumn($column_name, $key) { // TODO: use only in Column.php (only by procesy5.php) return UserProfile::getColumn($column_name, $key); } public static function isAdmin() { if (in_array(self::get('ADM_ADMIN_LEVEL'), array(0, 1))) { return true; } return false; } public static function getRawData() { $ret = array(); if (self::logged()) { $ret['id'] = self::getID(); $ret['login'] = self::getName(); $ret['name'] = self::get('ADM_NAME'); $ret['admin_level'] = self::get('ADM_ADMIN_LEVEL'); $ret['opis'] = self::get('ADM_ADMIN_DESC'); } return $ret; } public static function getCurrentUserObject() { $user = new stdClass(); if (self::logged()) { $user->ID = $_SESSION['ADM_ID']; $user->ADM_ACCOUNT = $_SESSION['AUTHORIZE_USER']; $user->ADM_ACCOUNT = $_SESSION['ADM_ACCOUNT']; $user->ADM_NAME = $_SESSION['ADM_NAME']; $user->ADM_TECH_WORKER = $_SESSION['ADM_TECH_WORKER']; $user->ADM_COMPANY = $_SESSION['ADM_COMPANY']; $user->ADM_ADMIN_LEVEL = $_SESSION['ADM_ADMIN_LEVEL']; $user->ADM_PHONE = $_SESSION['ADM_PHONE']; $user->ADM_ADMIN_EXPIRE = $_SESSION['ADM_ADMIN_EXPIRE']; $user->ADM_ADMIN_DESC = $_SESSION['ADM_ADMIN_DESC']; $user->EMPLOYEE_TYPE = $_SESSION['EMPLOYEE_TYPE']; } return $user; } public static function getAcl($acl = null) { static $_acl; if ($_acl) return $_acl; if (null !== $acl) {// force set acl $_acl = $acl; return $_acl; } Lib::loadClass('UserAcl'); $_acl = new UserAcl(self::getID(), $use_cache = true); $_acl->fetchGroups(); return $_acl; } public static function reloadAcl() { IF('123'==V::get('DBG_ACL','',$_GET)){echo'
SESSION KEYS (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): [';echo implode(',', array_keys($_SESSION));echo']';}
/*
* [3] => USER_PROFILE
* [29] => CRM_PROCES_USERA_WYKONANE_TESTY-4517
* [30] => TableAjax_Cache
*/
IF('123'==V::get('DBG_ACL','',$_GET)){echo'CONFIG (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($_SESSION['CONFIG']);echo'';}
IF('123'==V::get('DBG_ACL','',$_GET)){echo'TableAjax_Cache (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($_SESSION['TableAjax_Cache']);echo'';}
unset($_SESSION['TableAcl_cache']);
unset($_SESSION['Typespecial_Cache']);
unset($_SESSION['ADM_INICJALY_HANDLOWCA']);
unset($_SESSION['EMPLOYEE_TYPE']);
unset($_SESSION['DEFAULT_ACL_GROUP']);
IF('123'==V::get('DBG_ACL','',$_GET)){echo'SESSION KEYS (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): [';echo implode(',', array_keys($_SESSION));echo']';}
$testySesKey = 'CRM_PROCES_USERA_WYKONANE_TESTY-' . User::getID();
if (isset($_SESSION[$testySesKey])) unset($_SESSION[$testySesKey]);
$userAcl = User::getAcl();
$userAcl->fetchAllPerms(true);
}
public static function auth() {
$route = V::get('_route', '', $_REQUEST);
if (!empty($route)) {
Router::handleAuth($route);
} else {
self::authByRequest();
}
if (User::logged() && !V::get('ADM_ACL_LOADED', false, $_SESSION)) {
$userAcl = User::getAcl();
$userAcl->fetchAllPerms();
$_SESSION['ADM_ACL_LOADED'] = true;
}
if (User::logged() && User::isAdmin()) {
if (V::get('DBG_ON', '', $_REQUEST)) {
DBG::activate();
}
}
if (V::get('DBG_OFF', '', $_REQUEST)) {
DBG::deactivate();
}
}
public static function authByRequest() {
$task = V::get('LOGIN', '', $_REQUEST);
$data = array();
$data['errors'] = array();
Lib::loadClass('Config');
$data['ALLOW_GUEST_ACCOUNT'] = (int)Config::get('ALLOW_GUEST_ACCOUNT');
switch ($task) {
case 'LOGIN':
if (!User::logged()) {
$req_ADM_ACCOUNT = (isset($_REQUEST['ADM_ACCOUNT']))? $_REQUEST['ADM_ACCOUNT'] : '';
$req_ADM_PASSWD = (isset($_REQUEST['ADM_PASSWD']))? $_REQUEST['ADM_PASSWD'] : '';
if (empty($req_ADM_ACCOUNT) || empty($req_ADM_PASSWD)) {
$data['errors'][] = "Proszę podać poprawny login i hasło!";
} else {
try {
User::login($req_ADM_ACCOUNT, $req_ADM_PASSWD);
} catch (Exception $e) {
$data['errors'][] = $e->getMessage();
session_destroy();
unset($_SESSION['AUTHORIZE_USER']);
unset($_SESSION['ADM_ACCOUNT']);
Router::getRoute('Users')->logoutView($data);
exit;
}
}
}
break;
case 'LOGOUT':
if (User::logged()) {
$_SESSION = array();
session_destroy();// Remove the server-side session information.
session_write_close();
session_start();
session_regenerate_id(true);
Router::getRoute('Users')->logoutView($data);
exit;
}
break;
case 'PERMS_RELOAD':
if (User::logged()) {
try {
$dbgExecTime = new DebugExecutionTime();
$dbgExecTime->activate();
$dbgExecTime->log('start');
$routeFixCrmProcesInitIdx = Router::getRoute('FixCrmProcesInitIdx');
if ($routeFixCrmProcesInitIdx) {
$routeFixCrmProcesInitIdx->runMethod('callProcedure');
}
$dbgExecTime->log('FixCrmProcesInitIdx::callProcedure');
$fixAllPermsExecTime = $dbgExecTime->getLastExecTime();
User::reloadAcl();
$dbgExecTime->log('User::reloadAcl');
$fixUserPermsExecTime = $dbgExecTime->getLastExecTime();
} catch (Exception $e) {
$data['errors'][] = $e->getMessage();
}
Router::getRoute('Users')->reloadPermsView($data, $fixUserPermsExecTime);
exit;
}
break;
case 'ANONYMOUS_LOGIN':
if (!User::logged()) {
if ($data['ALLOW_GUEST_ACCOUNT'] != 1) {
$data['errors'][] = "Zablokowane logowaniwe na konto gościa!";
}
else {
$anonim = User::getAnonymousAccount();
if (!$anonim) {
$data['errors'][] = "Konto gościa nie istnieje!";
} else {
try {
User::login($anonim->ADM_ACCOUNT, $anonim->ADM_PASSWD);
} catch (Exception $e) {
$data['errors'][] = $e->getMessage();
}
}
}
}
break;
default:
}
if (!User::logged()) {
Router::getRoute('Users')->loginView($data);
exit;
}
}
public static function kandydatLogin($kandydatId, &$errors = array()) {
$user = self::kandydatLoginByDB($kandydatId, $errors);
if ($user) {
$_SESSION['ADM_ID'] = $user->ID;
$_SESSION['AUTHORIZE_USER'] = $user->ADM_ACCOUNT;
$_SESSION['ADM_ACCOUNT'] = $user->ADM_ACCOUNT;
//$_SESSION['ADM_AREA'] = $user->ADM_AREA;
$_SESSION['ADM_NAME'] = $user->ADM_NAME;
$_SESSION['ADM_TECH_WORKER'] = $user->ADM_TECH_WORKER;
$_SESSION['ADM_COMPANY'] = $user->ADM_COMPANY;
$_SESSION['ADM_ADMIN_LEVEL'] = $user->ADM_ADMIN_LEVEL;
$_SESSION['ADM_PHONE'] = $user->ADM_PHONE;
$_SESSION['ADM_ADMIN_EXPIRE'] = $user->ADM_ADMIN_EXPIRE;
$_SESSION['ADM_ADMIN_DESC'] = $user->ADM_ADMIN_DESC;
$_SESSION['EMPLOYEE_TYPE'] = $user->EMPLOYEE_TYPE;
// save user pass in encrypted form
Lib::loadClass('Crypt');
$_SESSION['ADM_PASS_HASH'] = Crypt::encrypt($pass);
$_SESSION['EMAIL_IMAP_IMPORT_PASSWD_HASH'] = Crypt::encrypt($user->EMAIL_IMAP_IMPORT_PASSWD);
$_SESSION['EMAIL_IMAP_IMPORT_HOST'] = $user->EMAIL_IMAP_IMPORT_HOST;
$_SESSION['EMAIL_IMAP_IMPORT_USERNAME'] = $user->EMAIL_IMAP_IMPORT_USERNAME;
//$keyFromHash = Crypt::decrypt($_SESSION['ADM_PASS_HASH']);
$userAcl = User::getAcl();
$userAcl->fetchAllPerms();
return true;
}
return false;
}
public static function login($login, $pass) {
Lib::loadClass('LDAP');
$ldap = ('1' == V::get('P5_DONT_USE_LDAP_FOR_AUTH', '', $_SERVER)) ? null : LDAP::getInstance();
$authClass = null;
{
$projectName = Config::getProjectName();
$projectPath = Config::getProjectPath();
$pathAuthClass = $projectPath ? "{$projectPath}/auth.php" : null;
if ($pathAuthClass && file_exists($pathAuthClass)) {
require_once $pathAuthClass;
$nameAuthClass = "Auth_{$projectName}";
if (!class_exists($nameAuthClass)) throw new Exception("Auth class not exists for project '{$projectName}'!");
$authClass = $nameAuthClass;
}
}
if ($ldap != null && $ldap->isConnected()) {
$user = self::loginByLDAP($login, $pass);
if ($user) { // user logged in by ldap - update password hash in db
DB::getPDO()->update('ADMIN_USERS', 'ID', $user->ID, [
'ADM_PASSWD_AES' => hash('sha512', $pass), // Mysql: SHA2('{$pass}', 512)
]);
}
} else if ($authClass) {
// $classname::aStaticMethod(); // As of PHP 5.3.0
$user = $authClass::login($login, $pass);
{ // default values
if (!$user->EMAIL_IMAP_IMPORT_HOST) $user->EMAIL_IMAP_IMPORT_HOST = null;
if (!$user->EMAIL_IMAP_IMPORT_USERNAME) $user->EMAIL_IMAP_IMPORT_USERNAME = null;
}
} else {
$user = self::loginByDB($login, $pass);
}
if ($user) {
$_SESSION['ADM_ID'] = $user->ID;
$_SESSION['AUTHORIZE_USER'] = $user->ADM_ACCOUNT;
$_SESSION['ADM_ACCOUNT'] = $user->ADM_ACCOUNT;
//$_SESSION['ADM_AREA'] = $user->ADM_AREA;
$_SESSION['ADM_NAME'] = $user->ADM_NAME;
$_SESSION['ADM_TECH_WORKER'] = $user->ADM_TECH_WORKER;
$_SESSION['ADM_COMPANY'] = $user->ADM_COMPANY;
$_SESSION['ADM_ADMIN_LEVEL'] = $user->ADM_ADMIN_LEVEL;
$_SESSION['ADM_PHONE'] = $user->ADM_PHONE;
$_SESSION['ADM_ADMIN_EXPIRE'] = $user->ADM_ADMIN_EXPIRE;
$_SESSION['ADM_ADMIN_DESC'] = $user->ADM_ADMIN_DESC;
$_SESSION['EMPLOYEE_TYPE'] = $user->EMPLOYEE_TYPE;
// save user pass in encrypted form
Lib::loadClass('Crypt');
$_SESSION['ADM_PASS_HASH'] = Crypt::encrypt($pass);
$_SESSION['EMAIL_IMAP_IMPORT_PASSWD_HASH'] = Crypt::encrypt($user->EMAIL_IMAP_IMPORT_PASSWD);
$_SESSION['EMAIL_IMAP_IMPORT_HOST'] = $user->EMAIL_IMAP_IMPORT_HOST;
$_SESSION['EMAIL_IMAP_IMPORT_USERNAME'] = $user->EMAIL_IMAP_IMPORT_USERNAME;
//$keyFromHash = Crypt::decrypt($_SESSION['ADM_PASS_HASH']);
$userAcl = User::getAcl();
$userAcl->fetchAllPerms();
$_SESSION['ADM_ACL_LOADED'] = true;
return true;
}
return false;
}
public static function loginByLDAP($login, $pass) {
$ldapUser = array();
$DBG = false;
Lib::loadClass('LDAP');
$ldap = LDAP::getInstance();
if (!$ldap->isConnected()) {
throw new Exception("Wystąpiły błędy podczas połączenia do bazy LDAP. Spróbuj ponownie za chwilę.");
}
$filter = (false !== strpos($login, '@'))? "(mail={$login})" : "(uid={$login})";
//$filter = "cn=*";// show all ldap accounts
$justthese = array();//array("uid", "givenName", "mail", "*");
if($DBG){echo'ldap_search (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r(array('ldaprdn'=>$ldap->getBaseDN(), 'filter'=>$filter, 'justthese'=>$justthese));echo'';}
$res = $ldap->search($filter, 'cn=users', $justthese);
if ($ldap->count_entries($res) > 0) {
$entry = $ldap->first_entry($res);
if ($entry) {
$ldapUser['user_dn'] = $ldap->get_dn($entry);
$val = $ldap->get_values($entry, 'uid');
$ldapUser['uid'] = $val[0];
$val = $ldap->get_values($entry, 'mail');
$ldapUser['mail'] = $val[0];
$val = $ldap->get_values($entry, 'cn');
$ldapUser['cn'] = $val[0];
} else {
throw new Exception("Login nie istnieje");
}
if($DBG){// test
echo'';
// print number of entries found
echo "Number of entries found: " . $ldap->count_entries($res) . "\n";
while ( $entry ) {
$dn = $ldap->get_dn($entry);
echo "$dn\n";
$attrs = $ldap->get_attributes($entry);
for ( $i=0; $i < $attrs['count']; $i++) {
echo "$attrs[$i]: ";
for ( $j=0; $j < $attrs[$attrs[$i]]['count']; $j++ ) {
echo $attrs[$attrs[$i]][$j] . " ";
}
echo "\n";
}
echo "\n";
$entry = $ldap->next_entry($entry);
}
$ldap->free_result($res);
echo'';
}// test
}
if (!$ldapUser['user_dn']) {
throw new Exception("Proszę podać poprawny login i hasło!");
}
if($DBG){echo'LDAP user (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($ldapUser);echo'';}
if($DBG){echo'ldap_bind (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r(array('ldaprdn'=>$ldapUser['user_dn'], 'pass'=>'***'));echo'';}
$ldapbind = $ldap->bind($ldapUser['user_dn'], $pass, $errorMsg);
if (!$ldapbind && "Error Binding to LDAP: No additional information is available." === $errorMsg) throw new Exception("Nieprawidłowy login lub hasło");
if (!$ldapbind) throw new Exception("Wystąpiły błędy podczas próby logowania. {$errorMsg}");
$user = new stdClass();
$user->AUTHORIZE_USER = $ldapUser['uid'];
$user->ADM_ACCOUNT = $ldapUser['uid'];
$user->ADM_NAME = $ldapUser['cn'];
$user->OTHER_INFO = $ldapUser['mail'];
$rawUser = DB::getPDO()->fetchFirst("
select u.*
from ADMIN_USERS u
where u.ADM_ACCOUNT = :login
and u.A_STATUS in('WAITING', 'NORMAL')
", [
':login' => $user->ADM_ACCOUNT,
]);
if (!$rawUser) throw new Exception("Wystąpiły błędy podczas próby logowania. Brak użytkownika w bazie danych.");
$user->ID = $rawUser['ID'];
$user->ADM_TECH_WORKER = $rawUser['ADM_TECH_WORKER'];
$user->ADM_COMPANY = $rawUser['ADM_COMPANY'];
$user->ADM_ADMIN_LEVEL = $rawUser['ADM_ADMIN_LEVEL'];
$user->ADM_PHONE = $rawUser['ADM_PHONE'];
$user->ADM_ADMIN_EXPIRE = $rawUser['ADM_ADMIN_EXPIRE'];
$user->ADM_ADMIN_DESC = $rawUser['ADM_ADMIN_DESC'];
$user->EMAIL_IMAP_IMPORT_PASSWD = $rawUser['EMAIL_IMAP_IMPORT_PASSWD'];
$user->EMAIL_IMAP_IMPORT_HOST = $rawUser['EMAIL_IMAP_IMPORT_HOST'];
$user->EMAIL_IMAP_IMPORT_USERNAME = $rawUser['EMAIL_IMAP_IMPORT_USERNAME'];
$user->EMPLOYEE_TYPE = $rawUser['EMPLOYEE_TYPE'];
return $user;
}
public static function loginByDB($login, $pass) {
$rawUser = DB::getPDO()->fetchFirst("
select u.*
from ADMIN_USERS u
where u.ADM_ACCOUNT = :login
and u.ADM_PASSWD_AES = :pass_hash
and u.A_STATUS in('WAITING', 'NORMAL')
", [
':login' => $login,
':pass_hash' => hash('sha512', $pass),
]);
if (!$rawUser) { // TODO: error log - change password for user
error_log("TODO: update password hash for user '{$login}'");
$rawUser = DB::getPDO()->fetchFirst("
select u.*
from ADMIN_USERS u
where u.ADM_ACCOUNT = :login
and ( u.ADM_PASSWD = :pass or u.ADM_PASSWD = md5( :pass ) )
and u.ADM_PASSWD != ''
and u.A_STATUS in('WAITING', 'NORMAL')
", [
':login' => $login,
':pass' => $pass,
]);
}
if (!$rawUser) throw new Exception("Proszę podać poprawny login i hasło!");
$user = new stdClass();
$user->ID = $rawUser['ID'];
$user->ADM_TECH_WORKER = $rawUser['ADM_TECH_WORKER'];
$user->ADM_COMPANY = $rawUser['ADM_COMPANY'];
$user->AUTHORIZE_USER = $rawUser['ADM_ACCOUNT'];
$user->ADM_ACCOUNT = $rawUser['ADM_ACCOUNT'];
$user->ADM_NAME = $rawUser['ADM_NAME'];
$user->ADM_ADMIN_LEVEL = $rawUser['ADM_ADMIN_LEVEL'];
$user->ADM_PHONE = $rawUser['ADM_PHONE'];
$user->ADM_ADMIN_EXPIRE = $rawUser['ADM_ADMIN_EXPIRE'];
$user->ADM_ADMIN_DESC = $rawUser['ADM_ADMIN_DESC'];
$user->EMAIL_IMAP_IMPORT_PASSWD = $rawUser['EMAIL_IMAP_IMPORT_PASSWD'];
$user->EMAIL_IMAP_IMPORT_HOST = $rawUser['EMAIL_IMAP_IMPORT_HOST'];
$user->EMAIL_IMAP_IMPORT_USERNAME = $rawUser['EMAIL_IMAP_IMPORT_USERNAME'];
$user->EMPLOYEE_TYPE = $rawUser['EMPLOYEE_TYPE'];
//$user->ADM_AREA = $rawUser['ADM_AREA'];
//$_SESSION['ADM_PASSWD'] = $pass;
return $user;
}
public static function kandydatLoginByDB($kandydatId, &$errors) {
$db = DB::getDB();
$kandydatId = (int)$kandydatId;
$sql = "SELECT u.*
from `ADMIN_USERS` as u
where
u.`ID`='{$kandydatId}'
and u.`A_STATUS` in('WAITING','NORMAL')
LIMIT 0, 1;
";
$res = $db->query($sql);
if (!$res) {
die("Error SQL login!");
}
$num_rows = $db->num_rows($res);
if ($num_rows == 0) {
$errors[] = "Podales zlego uzytkownika lub/i haslo()";
}
else if ($num_rows == 1) {
if ($r = $db->fetch($res)) {
$user = new stdClass();
$user->ID = $r->ID;
$user->ADM_TECH_WORKER = $r->ADM_TECH_WORKER;
$user->ADM_COMPANY = $r->ADM_COMPANY;
$user->AUTHORIZE_USER = $r->ADM_ACCOUNT;
$user->ADM_ACCOUNT = $r->ADM_ACCOUNT;
$user->ADM_NAME = $r->ADM_NAME;
$user->ADM_ADMIN_LEVEL = $r->ADM_ADMIN_LEVEL;
$user->ADM_PHONE = $r->ADM_PHONE;
$user->ADM_ADMIN_EXPIRE = $r->ADM_ADMIN_EXPIRE;
$user->ADM_ADMIN_DESC = $r->ADM_ADMIN_DESC;
$user->EMAIL_IMAP_IMPORT_PASSWD = $r->EMAIL_IMAP_IMPORT_PASSWD;
$user->EMAIL_IMAP_IMPORT_HOST = $r->EMAIL_IMAP_IMPORT_HOST;
$user->EMAIL_IMAP_IMPORT_USERNAME = $r->EMAIL_IMAP_IMPORT_USERNAME;
$user->EMPLOYEE_TYPE = $r->EMPLOYEE_TYPE;
//$user->ADM_AREA = "$r->ADM_AREA";
//$_SESSION['ADM_PASSWD'] = $pass;
return $user;
}
}
return false;
}
public static function changePassword($login, $oldPass, $newPass) {
if (!is_string($newPass)) throw new Exception("Błąd parametru");
if (strlen($newPass) < 8) throw new Exception("Hasło zbyt krótkie (min. 8 znaków)"); // TODO regex 1 mala litera, 1 mala litera, 1 cyfra, min. 8 znakow
if (!self::logged()) throw new Exception("Użytkownik niezalogwany");
Lib::loadClass('LDAP');
$ldap = LDAP::getInstance();
if ($ldap != null && $ldap->isConnected()) {
return self::changePasswordLDAP($login, $oldPass, $newPass);
} else {
return self::changePasswordDB($login, $oldPass, $newPass);
}
}
public static function changePasswordLDAP($login, $oldPass, $newPass) {
$usrStorageLdap = UserStorageFactory::getStorage('MacOSX');
if (!$usrStorageLdap) throw new Exception("Error storage Ldap not exists");
try {
$user = self::loginByLDAP($login, $oldPass);
} catch (Exception $e) {
throw new Exception("Błędne hasło");
}
if (!$user) throw new Exception("Błąd weryfikacji użytkownika");
if (!$usrStorageLdap->changePassword($login, $newPass)) {
throw new Exception("Błąd podczas zmiany hasła");
}
$affected = DB::getPDO()->update('ADMIN_USERS', 'ID', $user->ID, [
'ADM_PASSWD' => '',
'ADM_PASSWD_AES' => hash('sha512', $newPass), // Mysql: SHA2('{$pass}', 512)
]);
return ($affected > 0);
}
public static function changePasswordDB($login, $oldPass, $newPass) {
try {
$user = self::loginByDB($login, $oldPass);
} catch (Exception $e) {
throw new Exception("Błędne hasło");
}
if (!$user) throw new Exception("Błąd weryfikacji użytkownika");
$affected = DB::getPDO()->update('ADMIN_USERS', 'ID', $user->ID, [
'ADM_PASSWD' => '',
'ADM_PASSWD_AES' => hash('sha512', $newPass), // Mysql: SHA2('{$pass}', 512)
]);
return ($affected > 0);
}
/**
* Check user access.
* @param string $name
* 'menu' - access to view menu
*
* @from [4101] ADM_ADMIN_LEVEL
* Poziom uprawnień - każdy powinien mieć poziom o numerze 3
* kierownicy powinni mieć 2
* a administratorzy 0
* kandydaci poziom 6.
* Poziom 1 umożliwia edycje procesów i zasobów
* poziom 2 umożliwia ocenę testów
* poziom 3 umożliwia widzenie systemu jakości.
*/
public static function hasAccess($name) {
switch ($name) {
case 'menu': {
if (User::get('ADM_ADMIN_LEVEL') < 6) {
return true;
}
else {
Lib::loadClass('Config');
$ALLOW_GUEST_ACCOUNT = (int)Config::get('ALLOW_GUEST_ACCOUNT');
if ($ALLOW_GUEST_ACCOUNT && User::getLogin() == 'anonymous') {
return true;
}
}
break;
}
case 'dbg': {
return (0 == User::get('ADM_ADMIN_LEVEL'));
break;
}
case 'procesy': {
if (User::get('ADM_ADMIN_LEVEL') < 4) return true;
break;
}
case 'procesy_admin': {
if (User::get('ADM_ADMIN_LEVEL') < 2) return true;
break;
}
case 'testy': {
if (User::get('ADM_ADMIN_LEVEL') <= 6) return true;
break;
}
case 'testy_wyniki': {
if (User::get('ADM_ADMIN_LEVEL') < 3) return true;
break;
}
case 'testy_wyniki_edit': {
if (User::get('ADM_ADMIN_LEVEL') < 3) return true;
break;
}
case 'testy_wyniki_read': {
if (User::get('ADM_ADMIN_LEVEL') < 3) return true;
break;
}
case 'user_add_group': {
if (User::get('ADM_ADMIN_LEVEL') < 1) return true;
break;
}
default:
}
return false;
}
public static function hasAccessToEditTable($tableName) {
if (empty($tableName)) return;
$userAcl = User::getAcl();
$userAcl->fetchGroups();
Lib::loadClass('ProcesHelper');
$zasobID = ProcesHelper::getZasobTableID($tableName);
if (!$userAcl->hasTableAcl($zasobID)) {
return false;
}
$tblAcl = $userAcl->getTableAcl($zasobID);
if (empty($tblAcl)) {
echo "Brak dostępu do tabeli nr {$zasobID} '{$tableName}'"; return;
//throw new Exception("Brak dostępu do tabeli nr {$zasobID} '{$tableName}'");
}
$tblAcl->init();
return $tblAcl->hasEditPerms();
}
public static function hasGroup($groupName) {
// TODO: find group by name @see self::getGroups() @used in SchemaReaderProcess
return false;
}
public static function getAnonymousAccount() {
$db = DB::getDB();
if (!$db) die("Error DB connection!");
$sql = "select u.*
from `ADMIN_USERS` as u
where
u.`ADM_ACCOUNT`='anonymous'
and u.`EMPLOYEE_TYPE`='Anonymous'
and u.`A_STATUS` in('NORMAL')
order by u.`ID` asc
limit 1
";
$res = $db->query($sql);
if (!$res) die("Error SQL login!");
$num_rows = $db->num_rows($res);
if ($r = $db->fetch($res)) {
//$_SESSION['ADM_PASSWD'] = $pass;
$user = new stdClass();
$user->ID = "$r->ID";
$user->AUTHORIZE_USER = "$r->ADM_ACCOUNT";
$user->ADM_ACCOUNT = "$r->ADM_ACCOUNT";
$user->ADM_PASSWD = "$r->ADM_PASSWD";
//$user->ADM_AREA = "$r->ADM_AREA";
$user->ADM_NAME = "$r->ADM_NAME";
$user->ADM_TECH_WORKER = "$r->ADM_TECH_WORKER";
$user->ADM_COMPANY = "$r->ADM_COMPANY";
$user->ADM_ADMIN_LEVEL = "$r->ADM_ADMIN_LEVEL";
$user->ADM_PHONE = "$r->ADM_PHONE";
$user->ADM_ADMIN_EXPIRE = "$r->ADM_ADMIN_EXPIRE";
$user->ADM_ADMIN_DESC = "$r->ADM_ADMIN_DESC";
return $user;
}
return false;
}
public static function getLdapGroups() {
$ldapGroups = User::_fetchLdapGroups();
return $ldapGroups;
}
public static function getLdapGroupsNames() {
$ldapGroupsNames = array();
$ldapGroups = User::_fetchLdapGroups();
foreach ($ldapGroups as $kID => $vLDAPGroup) {
$ldapGroupsNames[$kID] = $vLDAPGroup->cn;
}
return $ldapGroupsNames;
}
public static function getLdapGroupsIds() {
$ldapGroups = User::_fetchLdapGroups();
$gidNumbers = array();
if (!empty($ldapGroups)) {
foreach ($ldapGroups as $vLdapGroup) {
$gidNumbers[] = $vLdapGroup->gidNumber;
}
}
return $gidNumbers;
}
public static function _fetchLdapGroups() {
static $_groups;
if (!$_groups) {
$login = User::getLogin();
Lib::loadClass('UsersLdapHelper');
$_groups = UsersLdapHelper::getUserGroups($login, 3);
//echo'getLDAPGroupByUserName (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($_groups);echo'';
}
return $_groups;
}
}