Files
crmPRO/autoload/Domain/Users/PermissionRepository.php
2026-02-28 14:48:24 +01:00

79 lines
2.0 KiB
PHP

<?php
namespace Domain\Users;
class PermissionRepository
{
const MODULES = [ 'tasks', 'projects_view', 'projects_add', 'projects_edit', 'projects_delete', 'finances', 'wiki', 'crm', 'work_time' ];
const DEFAULTS = [
'tasks' => 1,
'projects_view' => 1,
'projects_add' => 1,
'projects_edit' => 1,
'projects_delete' => 1,
'finances' => 0,
'wiki' => 1,
'crm' => 0,
'work_time' => 1
];
private $mdb;
public function __construct( $mdb = null )
{
if ( $mdb )
$this -> mdb = $mdb;
else if ( isset( $GLOBALS['mdb'] ) )
$this -> mdb = $GLOBALS['mdb'];
else
$this -> mdb = null;
}
public static function defaults()
{
return self::DEFAULTS;
}
public function byUserId( $user_id )
{
if ( !$this -> mdb )
return self::defaults();
$row = $this -> mdb -> get( 'users_permissions', '*', [ 'user_id' => (int)$user_id ] );
if ( !$row )
return self::defaults();
$result = [];
$legacy_projects_value = isset( $row['projects'] ) ? (int)$row['projects'] : 1;
foreach ( self::MODULES as $module )
{
if ( isset( $row[ $module ] ) )
$result[ $module ] = (int)$row[ $module ];
else if ( strpos( $module, 'projects_' ) === 0 )
$result[ $module ] = $legacy_projects_value;
else
$result[ $module ] = isset( self::DEFAULTS[ $module ] ) ? (int)self::DEFAULTS[ $module ] : 0;
}
return $result;
}
public function save( $user_id, array $modules )
{
if ( !$this -> mdb )
return;
$data = [];
foreach ( self::MODULES as $module )
$data[ $module ] = isset( $modules[ $module ] ) ? (int)(bool)$modules[ $module ] : 0;
$existing = $this -> mdb -> get( 'users_permissions', 'user_id', [ 'user_id' => (int)$user_id ] );
if ( $existing )
$this -> mdb -> update( 'users_permissions', $data, [ 'user_id' => (int)$user_id ] );
else
$this -> mdb -> insert( 'users_permissions', array_merge( [ 'user_id' => (int)$user_id ], $data ) );
}
}