- Added `users_permissions` table for managing user permissions. - Created `PermissionRepository` for handling permission logic. - Refactored `controls\Users::permissions()` to utilize the new database structure. - Introduced AJAX endpoint for saving user permissions. - Enhanced user management UI with permission checkboxes. - Added vacation management template for handling employee absences. - Implemented tests for `PermissionRepository`.
93 lines
1.9 KiB
PHP
93 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace factory;
|
|
class Users
|
|
{
|
|
static public function user_details( $user_id )
|
|
{
|
|
global $mdb;
|
|
|
|
if ( !$user = \Cache::fetch( "user_details:$user_id" ) )
|
|
{
|
|
$user = $mdb -> get( 'users', '*', [ 'id' => $user_id ] );
|
|
\Cache::store( "user_details:$user_id", $user );
|
|
}
|
|
|
|
return $user;
|
|
}
|
|
|
|
public static function get_default_project( $user_id )
|
|
{
|
|
global $mdb;
|
|
return $mdb -> get( 'users', 'default_project', [ 'id' => $user_id ] );
|
|
}
|
|
|
|
public static function get_user_email( $user_id )
|
|
{
|
|
global $mdb;
|
|
return $mdb -> get( 'users', 'email', [ 'id' => $user_id ] );
|
|
}
|
|
|
|
public static function user_name( $user_id )
|
|
{
|
|
global $mdb;
|
|
|
|
$user = $mdb -> get( 'users', '*', [ 'id' => $user_id ] );
|
|
|
|
return $user['name'] . ' ' . $user['surname'];
|
|
}
|
|
|
|
public static function users_list()
|
|
{
|
|
global $mdb, $user;
|
|
|
|
$users = $mdb -> select( 'users', '*' );
|
|
|
|
if ( $user['id'] === 1 )
|
|
{
|
|
return $users;
|
|
}
|
|
else
|
|
{
|
|
$users_list = [];
|
|
foreach ( $users as $user_tmp )
|
|
{
|
|
if ( $user_tmp['id'] != 6 )
|
|
$users_list[] = $user_tmp;
|
|
}
|
|
|
|
return $users_list;
|
|
}
|
|
}
|
|
|
|
|
|
public static function login( $email, $plain_password )
|
|
{
|
|
global $mdb;
|
|
|
|
$result = $mdb -> get( 'users', '*', [ 'email' => strtolower( $email ) ] );
|
|
|
|
if ( !$result )
|
|
return false;
|
|
|
|
if ( strtolower( $email ) !== strtolower( $result['email'] ) )
|
|
return false;
|
|
|
|
// bcrypt hash (migrated passwords)
|
|
if ( password_verify( $plain_password, $result['password'] ) )
|
|
return $result;
|
|
|
|
// MD5 fallback (legacy passwords) — rehash to bcrypt on success
|
|
if ( md5( $plain_password ) === $result['password'] )
|
|
{
|
|
$mdb -> update( 'users', [
|
|
'password' => password_hash( $plain_password, PASSWORD_BCRYPT )
|
|
], [ 'id' => $result['id'] ] );
|
|
|
|
return $result;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|