[UAS] Core

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #1
Kruzya добавил(а) новый ресурс:

[UAS] Core - Единая система админок

Unified Admin System - ещё одна попытка сделать нормальную админ-систему с поддержкой нескольких серверов. UAS пытается так же разделить загрузчик администраторов и любое взаимодействие пользователя с записями в СУБД в разные плагины, что позволяет установить загрузчик везде, а интерфейс - только на один сервер (или вообще не устанавливать).

Узнать больше об этом ресурсе...
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #2
Описание структуры базы
Считаю, что оно излишне, ибо пометки к ней оставлены в виде комментариев в самой структуре, но почему бы и нет...
Я постараюсь своевременно обновлять тему, и держать чейнджлог в конце поста.
Плагин старается использовать весь доступный функционал SM по админкам!

Для начала, описание таблиц по именам:
  • uas_admin. В этой таблице хранятся перечисления всех имеющихся в системе администраторов. Перейти к описанию.
  • uas_admin_group. В этой таблице хранятся пары "администратор - сервер - группа". Она используется исключительно для определения, на каких серверах какие группы имеются у Администратора.
    Для тех, кто не понял: система предполагает выдачу более одной группы Администратору. Перейти к описанию.
  • uas_admin_flags. В этой таблице хранятся пары "администратор - сервер" с переназначениями флагов/иммунитета (если требуется). Используется для выгрузки администраторов на сервера. Перейти к описанию.
  • uas_group. Здесь хранятся все имеющиеся админ-группы. Все добавленные однажды сюда группы скачиваются абсолютно на все сервера без исключения. Перейти к описанию.
  • uas_group_immunity. Здесь хранятся пары "группа - группа". Эта таблица позволяет запретить одной группе администраторов как-либо взаимодействовать с другой. Перейти к описанию.
  • uas_group_override. Здесь хранятся переназначения прав для групп ("для группы Х разрешить доступ к команде У", "для группы Z запретить доступ к команде У" и т.д.). Перейти к описанию.
  • uas_override. Переназначения команд. Перейти к описанию.
  • uas_override_server. В этой таблице хранятся пары "переназначение - сервер". Она используется для выяснения, какие оверрайды на какой сервер должны быть загружены. Перейти к описанию.
  • uas_server. Здесь мы храним все сервера. Таблица строится полностью на основе конфига. Перейти к описанию.
Для начала, рассмотрим, что хранит uas_admin.

uas_admin. В этой таблице хранятся все записи администраторов.
heidisql_V05v59K9yi.png

  • admin_id. Уникальный идентификатор администратора. Используется исключительно для внутренних нужд.
  • username. Имя администратора.
  • auth_method. Способ авторизации. По-умолчанию, SourceMod поддерживает авторизации ip, steam и name. Пользователи могут создавать свои способы авторизации, потому тип у колонки varchar, а не enum.
  • auth_value. Значение, передаваемое аутентификатору. Для ip - IP-адрес игрока, для steam - SteamID любого вида (кроме ссылок), и так далее.
  • password. Серверный пароль. НЕ ДОЛЖЕН БЫТЬ ЗАХЕШИРОВАН КАК-ЛИБО, ИСПОЛЬЗУЕТСЯ САМИМ SM ДЛЯ АУТЕНТИФИКАЦИИ.
  • flags. Имеющиеся админ-флаги у администратора в виде побитовой суммы флагов.
  • immunity. Иммунитет администратора.

uas_admin_group. Здесь хранятся записи, обозначающие плагину, к какой группе какой администратор принадлежит, и на каких серверах конкретно распространяются эти права. Все администраторы, добавленные в эту таблицу, будут так же загружены плагином, независимо от uas_admin_flags.
heidisql_CvR1RPp70I.png

  • admin_group_id. Уникальный идентификатор записи. Не используется загрузчиком.
  • admin_id. Идентификатор администратора из таблицы uas_admin.
  • server_id. Идентификатор сервера из таблицы uas_server.
  • title. Имя группы из таблицы uas_group.
  • deleted_at. Время, когда у Администратора был убран доступ. Если NULL - предполагается, что удаления не было, и у пользователя вечный доступ. Если любое иное значение - используется как "когда админка в этой группе должна истечь".
Эта таблица не предполагает прямого удаления прав у Администраторов. Вместо этого, используйте deleted_at.

uas_admin_flags. Используется для хранения сопоставления "администратор - сервер". Все добавленные записи в эту таблицу позволяют понять плагину, каких администраторов именно ему надо загружать.
heidisql_H3foishFE9.png

  • admin_id. Идентификатор администратора из таблицы uas_admin.
  • server_id. Идентификатор сервера из таблицы uas_server.
  • flags. Имеющиеся админ-флаги у администратора в виде побитовой суммы флагов. Если NULL - используется значение из uas_admin.
  • immunity. Иммунитет администратора. Если NULL - используется значение из uas_admin.
  • deleted_at. Время, когда у Администратора был убран доступ. Если NULL - предполагается, что удаления не было, и у пользователя вечный доступ. Если любое иное значение - используется как "когда админка на этом сервере должна истечь".
Эта таблица не предполагает прямого удаления прав у Администраторов. Вместо этого, используйте deleted_at.

uas_group. Здесь хранятся все имеющиеся админ-группы в системе. Все админ-группы скачиваются абсолютно на все сервера.
46381

  • title. Имя админ-группы.
  • immunity. Иммунитет админ-группы.
  • flags. Имеющиеся админ-флаги у админ-группы в виде побитовой суммы флагов.
  • deleted_at. Время, когда админ-группа была удалена. Если NULL - предполагается, что админ-группа не была удалена.
Так же, как и в случае с uas_admin, эта таблица не предполагает прямого удаления записей. Используйте deleted_at.

uas_group_immunity. Хранящиеся здесь записи сообщают SM, какие админ-группы не могут "таргетить" пользователей каких админ-групп.
46382

  • target. Имя админ-группы из таблицы uas_group.
  • other. Имя админ-группы из таблицы uas_group.
Администраторы группы target получают полный иммунитет от действий администраторов из группы other, независимо от уровней иммунитета.

uas_group_override. Хранимые здесь переназначения сообщают SM, доступ к каким командам/группам команд должен быть разрешён/запрещён каким админ-группам.
46383

  • title. Имя админ-группы из таблицы uas_group.
  • command. Имя команды/группы команд.
  • override_type. Тип команды: одиночная команда или группа команд. Допустимые значения: Command и CommandGroup.
  • has_access. Имеется ли доступ у пользователей админ-группы к команде/группе команд? Допустимые значения: Y и N.

uas_override. Здесь хранятся все переназначения прав на команды.
46384

  • override_id. Внутренний идентификатор переназначения.
  • command. Имя команды/группы команд.
  • override_type. Тип команды: одиночная команда или группа команд. Допустимые значения: Command и CommandGroup.
  • flags. Требуемые админ-флаги в виде побитовой суммы флагов. Соответственно, 0 снимает требование админки с команды/группы команд.

uas_override_server. В отличие от uas_group, переназначения скачиваются только на определённые сервера. Здесь можно перечислить, какое переназначение на какой сервер должно быть загружено.
46385

  • server_id. Идентификатор сервера из таблицы uas_server. Если использовать NULL в качестве значения - переназначение будет загружен на все сервера.
  • override_id. Идентификатор переназначения из таблицы uas_override.

uas_server. Здесь хранятся все сервера, которые использовали плагин. Плагин сам добавит сервер в эту таблицу, используя заполненные идентификатор, адрес, порт и хостнейм.
Если идентификатор отличается, но пара "адрес-порт" в базе присутствуют - идентификатор будет обновлён и в этой таблице, и во всех других.
46386

  • server_id. Уникальный идентификатор сервера.
  • address. Адрес сервера, записанный в виде 32-битного числа.
  • port. Порт сервера.
  • hostname. Имя сервера.
  • deleted_at. Время, когда сервер был удалён. Если NULL - предполагается, что сервер не был удалён, и всё ещё используется.
  • synced_at. Время, когда сервер последний раз выполнял синхронизацию.
Прямое удаление в этой таблице так же не предполагается, используйте deleted_at.
  • v0.0.0.1: Первая публикация.
  • v0.0.0.3
    • uas_override: Добавлена новая колонка override_id, изменён PRIMARY KEY c пары полей command, override_type на override_id
    • Добавлена таблица uas_override_server
  • v0.0.0.5
    • Добавлена таблица uas_admin_server
    • uas_override_server: Убрана пометка NOT NULL у server_id
  • v1.0.0.0
    • Удалена таблица uas_admin_authmethod
    • uas_admin: Добавлены колонки auth_method, auth_value
  • v1.0.0.3
    • uas_server: Добавлена колонка synced_at
  • v1.0.0.4
    • uas_admin: Колонка deleted_at удалена.
    • uas_admin_server: Использование NULL в server_id более невозможно.
    • uas_admin_server: Добавлены колонки flags, immunity, deleted_at
    • uas_admin_server: Таблица переименована в uas_admin_flags
    • uas_admin_group: Добавлена колонка deleted_at
 
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #4
Опубликовал в конце поста #2 спойлер с изменениями структуры, которые вносились во время работы. Содержимое спойлера будет обновляться по мере необходимости.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #7
То, что делается сейчас, - замена МА в том или ином виде. Но без веба. Если кому надо будет - сделает сам, но я не люблю вообще веб разработку. Оффтоп

Чуть позже сами все увидите.
 

SAPSAN 隼

Не было б печали, если бы ключи мне дали!
Сообщения
820
Реакции
776
Ну ладно, тогда ждем что выйдет
Оффтоп
 

AZA

/reset
Сообщения
883
Реакции
162
А дапм точно рабочий?
Чот не хочет.
Mysql:Версия сервера: 5.7.26
#1215 - Невозможно добавить ограничения внешнего ключа

SQL:
-- Data exporting was unselected.

-- Dumping structure for table uas.uas_admin_group
CREATE TABLE IF NOT EXISTS `uas_admin_group` (
  `admin_group_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique admin group pair id',
  `admin_id` int(10) unsigned NOT NULL COMMENT 'Administrator identifier',
  `server_id` int(10) unsigned NOT NULL COMMENT 'Server identifier (if null - group will be added to all servers)',
  `title` varchar(256) NOT NULL COMMENT 'Group title',
  PRIMARY KEY (`admin_group_id`),
  UNIQUE KEY `admin_id_server_id_title` (`admin_id`,`server_id`,`title`),
  KEY `FK_uas_admin_group_uas_group` (`title`),
  KEY `FK_uas_admin_group_uas_server` (`server_id`),
  CONSTRAINT `FK_uas_admin_group_uas_admin` FOREIGN KEY (`admin_id`) REFERENCES `uas_admin` (`admin_id`) ON UPDATE CASCADE,
  CONSTRAINT `FK_uas_admin_group_uas_group` FOREIGN KEY (`title`) REFERENCES `uas_group` (`title`) ON UPDATE CASCADE,
  CONSTRAINT `FK_uas_admin_group_uas_server` FOREIGN KEY ([...]
 

kleuser

Участник
Сообщения
1,838
Реакции
732
замена МА в том или ином виде. Но без веба.
без веба не интересно как-то, да и заменой МА без него это громко сказано. хоть что нибудь простенькое бы запилил бы в комплекте.
Смысл вообще ещё что-то делать, ты же там участвуешь в GM-X вроде, пилил бы под него плагин, а веб за тебя уже другие пилят. Вот вам и замена MA. Или я чего-то не понимаю.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #12
Основная проблема при реализации той или иной веб-морды (если пилить в массы) - PHP. И дело вовсе не в версии.
Если читали блог GameX, который был упомянут, то должны знать, что прямо сейчас нам приходится адски извращаться, чтобы веб-панель работала "везде, где возможно", потому что, казалось бы, простые функции могут выдавать неожиданный, нигде не описанный никем результат. И это полная дичь.

ты же там участвуешь в GM-X вроде, пилил бы под него плагин
Под него плагин продолжает пилиться. Правда, сейчас не так активно, как хотелось бы, ибо упёрся с проблемой, которая требует вмешательств на веб-стороне. Оффтоп

Так или иначе, GameX навряд ли будет реализовывать полный функционал админкеша SourceMod (цель которую я и ставил ещё полгода назад, задумывая конкретно этот плагин) из-за того, что GameX пытается быть совместимым и с АМХХ, и с SM, но не весь функционал есть и там, и там.

Раскрою карты.
Вдогонку к UAS, планируется Unified Punishment System (UPS). "Очередная бан-система", никак не привязанная к какой-либо админ-системе. И задумка хранения наказаний в UPS точно такая же, как и в GameX: одна таблица под всевозможные баны (блокировка игры на сервере, муты, гаги) с возможностью так же реализовывать свои виды наказаний. Например, бан стрельбы Оффтоп.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #13
Допускаю, что дамп может не перевариваться при импорте через phpMyAdmin, к примеру, из-за очерёдности запросов на создание таблиц. Через консольный MySQL или HeidiSQL всё должно быть ок.
Подумаю что-нибудь на эту тему, чтобы держать дамп на Гите возможным для импорта через всевозможные способы.
 

AZA

/reset
Сообщения
883
Реакции
162
Последнее редактирование:

iSe7en

Участник
Сообщения
209
Реакции
111
Топ, сэкономил мне пару дней. Планируется ли на гитхаб плагин выложить?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #16
Планируется ли на гитхаб плагин выложить?
Я надеялся, это была шутка.
46436

Туда же можно складывать любые возникающие предложения по структуре.

Где реализовал many to many,не много перестался:) Там не внешние ключи должны быть,а один составной.Можешь пример у доктрины глянуть Association Mapping - Doctrine Object Relational Mapper (ORM)
Не совсем понял, что именно не так.
На какой пример реализации Many-to-Many там смотреть?
 

AZA

/reset
Сообщения
883
Реакции
162
Я надеялся, это была шутка.
Посмотреть вложение 46436
Туда же можно складывать любые возникающие предложения по структуре.


Не совсем понял, что именно не так.
На какой пример реализации Many-to-Many там смотреть?
Many-To-Many, Unidirectional


Могу уже исправленный дамп дать.Колбашу панельку:D
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #20
Посмотрел. В принципе, можно и так, да.
Заберу изменения, только дождусь Issue от Рико. Он там что-то хотел по структуре написать ещё.
 
Сверху Снизу