mirror of
https://github.com/avecms/AVE.cms.git
synced 2026-08-01 08:45:44 +00:00
87 lines
2.6 KiB
PHP
87 lines
2.6 KiB
PHP
<?php
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------------------
|
|
| AVE.cms
|
|
|--------------------------------------------------------------------------------------
|
|
| @package AVE.cms
|
|
| @file adminx/Support/Roles.php
|
|
| @author AVE.cms <support@ave-cms.ru>
|
|
| @copyright 2007-2026 (c) AVE.cms
|
|
| @link https://ave-cms.ru
|
|
| @version 3.3
|
|
*/
|
|
|
|
namespace App\Adminx\Support;
|
|
|
|
defined('BASEPATH') || die('Direct access to this location is not allowed.');
|
|
|
|
use DB;
|
|
use App\Common\SystemTables;
|
|
|
|
/**
|
|
* Общий справочник ролей: расшифровка code → человекочитаемое имя.
|
|
*
|
|
* Источник — таблица {prefix}_roles (RBAC). Используется везде, где роль
|
|
* показывается пользователю (список/фильтры/формы), чтобы не светить голый код
|
|
* (`admin` → «Администратор»).
|
|
*/
|
|
class Roles
|
|
{
|
|
/** @var array|null кеш карты на запрос */
|
|
protected static $map = null;
|
|
|
|
/** Фолбэк-имена, если таблица ролей ещё не создана. */
|
|
protected static function fallback()
|
|
{
|
|
return array(
|
|
'admin' => 'Администратор',
|
|
'guest' => 'Гостевая',
|
|
'moderator' => 'Модератор',
|
|
'user' => 'Пользователи',
|
|
);
|
|
}
|
|
|
|
/** Карта code => name (из БД, иначе фолбэк). */
|
|
public static function map()
|
|
{
|
|
if (self::$map !== null) {
|
|
return self::$map;
|
|
}
|
|
|
|
$map = array();
|
|
try {
|
|
$exists = DB::query('SHOW TABLES LIKE %s', SystemTables::table('roles'))->getValue();
|
|
if ($exists) {
|
|
$rows = DB::query('SELECT code, name FROM ' . SystemTables::table('roles') . ' ORDER BY is_system DESC, name ASC')->getAll();
|
|
foreach ($rows ?: array() as $row) {
|
|
$row = (array) $row;
|
|
$code = trim((string) $row['code']);
|
|
if ($code !== '') {
|
|
$map[$code] = (string) $row['name'] !== '' ? (string) $row['name'] : $code;
|
|
}
|
|
}
|
|
}
|
|
} catch (\Throwable $e) {
|
|
$map = array();
|
|
}
|
|
|
|
self::$map = $map ?: self::fallback();
|
|
return self::$map;
|
|
}
|
|
|
|
/** Имя роли по коду (или сам код, если не найдено). */
|
|
public static function name($code)
|
|
{
|
|
$code = (string) $code;
|
|
$map = self::map();
|
|
return isset($map[$code]) ? $map[$code] : $code;
|
|
}
|
|
|
|
/** Валидные коды ролей. */
|
|
public static function codes()
|
|
{
|
|
return array_keys(self::map());
|
|
}
|
|
}
|