|
Архив - только для чтения |
Модератор форума: andycrowz |
Форум » Корзина форума » Корзина » Command Permission System (Решение нашла. Требуется подробная расшифровка.) |
Command Permission System |
Раньше было достаточно запихнуть ай ди своего аккаунта в 4 группы RBAC (rbac_account_groups) и абсолютно все GM команды были доступны.
Долгое время не занималась ядром и базой. Скачала последнюю. Теперь доступ ко всем командам нужно выдавать как то по другому. Добавила свой аккаунт во все 4 группы, но многие команды недоступны. В частности, введя команду .acc вместо надписи "Уровень вашего аккаунта такой то", я увидела, сообщение о неправильном синтаксисе. Команда недоступна мне, несмотря на добавленный аккаунт во все 4 группы (rbac_account_groups). Теперь в базе world таблице command появился столбец permission вместо security. И числа там вообще непонятные. 217, 421, 334. Решение вроде бы найдено. Но хотелось бы, чтоб знающие люди ПОДРОБНЕЕ и на русском объяснили метод вычисления пермиссиона команды. Решение вот http://www.trinitycore.org/f/topic/9104-command-permission-system/ Для тех, кому лень бежать по ссылке - вот текст, объясняющий, как пользоваться новой системой: Something like that the permission column in command table links to permission IDs. As you see in rbac_roles, 2 is Moderator Commands. Then in rbac_role_permissions 2 is bound to 8 and 218 permissionIDs Then if you check command table, 8 contains a bunch of moderator commands and 218 is .account addon command rbac_roles -> rbac_role_permissions -> command IE: player -> has many permissions, IE 8, -> command table has permission set to 8 for a group of commands, player has access to them. Я вот не въехала, как у него при совмещении 2 и 8 получилось 218... Кто может - объясните подробно. Спасибо. |
Я долго пытался вникнуть в суть, но почти безрезультатно. Мне негде проверить свои догадки. Если есть возможность, то пытайся проверять, о результатах пиши сюда.
Вот, что я надумал: Здесь, на сколько я понял, выложено последовательность указания цифр Цитата (MadSochi) rbac_roles -> rbac_role_permissions -> command Берем конкретные цифры 218. Согласно этому и моих больных догадках: 2 - айди группы аккаунта Код 1 = Player 2 = Moderator 3 = GameMaster 4 = Administrator 1 - дополнительные преимщуества аккаунта, соответственно единица - это RBAC_PERM_INSTANT_LOGOUT ТЫК 8 - комманды, которые будут доступны. Так же взять из ссылки выше |
2 - это идентификатор роли.
8 - это целая группа разрешений (permission) в данном случае для модераторов. 218 - это обычное разрешение (permission) в данном случае для использования команды .account addon. Т.е. 2 это роль, к которой относится разрешение (permission) с идентификатором 8 и с идентификатором 218, и глядя в таблицу command, видно что 8 это целая группа команд в данном случае для модератора и + еще отдельное разрешение (permission) 218, в данном случае команда .account addon. Подробнее: - Есть группа ролей, которая имеет свой идентификатор, они находятся в таблице rbac_roles (Например: 1 - Стандартные команды для игрока, 2 - Стандартные команды для модератора, 3 - Для Гейм мастера, 4 - Администратора, и другие группы, в названии там понятно к чему они относятся) - Есть также 4 группы разрешений (7 - Игрок, 8 - Модератор, 9 - Гейм мастер, 10 - Администратор). Эти группы уже содержат свой набор разрешений, которые можно посмотреть в таблице command и их собственно уже можем использовать по заданным группам. - И есть отдельные разрешения у которых уникальный идентификатор (permissionId), их нужно цеплять в таблице rbac_role_permission к определенным ролям, а роли цеплять к определенным группам ролей в таблице rbac_role_group. Ну, а если нужно дать разрешения или группы разрешений для определенного аккаунта, то делаем это в таблицах rbac_account_groups, rbac_account_permissons, rbac_account_roles в зависимости что мы хотим разрешить для него. Конечно сильно запутали они там все, и с начало может ничего не понятно, но мне хватило 5 минут сейчас чтобы в этом разобраться, прочитав тот пост.
Не ошибается тот, кто ничего не делает.
Сообщение # 3 написано 09.09.2013 в 21:09
|
Цитата (Maklaren) 2 - это идентификатор роли. 8 - это целая группа разрешений (permission) в данном случае для модераторов. 218 - это обычное разрешение (permission) в данном случае для использования команды .account addon. Т.е. 2 это роль, к которой относится разрешение (permission) с идентификатором 8 и с идентификатором 218, и глядя в таблицу command, видно что 8 это целая группа команд в данном случае для модератора и + еще отдельное разрешение (permission) 218, в данном случае команда .account addon. Подробнее: - Есть группа ролей, которая имеет свой идентификатор, они находятся в таблице rbac_roles (Например: 1 - Стандартные команды для игрока, 2 - Стандартные команды для модератора, 3 - Для Гейм мастера, 4 - Администратора, и другие группы, в названии там понятно к чему они относятся) - Есть также 4 группы разрешений (7 - Игрок, 8 - Модератор, 9 - Гейм мастер, 10 - Администратор). Эти группы уже содержат свой набор разрешений, которые можно посмотреть в таблице command и их собственно уже можем использовать по заданным группам. - И есть отдельные разрешения у которых уникальный идентификатор (permissionId), их нужно цеплять в таблице rbac_role_permission к определенным ролям, а роли цеплять к определенным группам ролей в таблице rbac_role_group. Ну, а если нужно дать разрешения или группы разрешений для определенного аккаунта, то делаем это в таблицах rbac_account_groups, rbac_account_permissons, rbac_account_roles в зависимости что мы хотим разрешить для него. Конечно сильно запутали они там все, и с начало может ничего не понятно, но мне хватило 5 минут сейчас чтобы в этом разобраться, прочитав тот пост. я так и не понял, откуда берется 1 и для чего она? Просто как дополнительное разрешение из http://collab.kpsn.org/display/tc/RBAC:+Role+based+Access+Control или оно от чего-то зависит?
Сообщение # 4 написано 09.09.2013 в 21:12
|
Ты внимательно мой пост прочитал? Зачем разбивать число 218 на 3 числа? Это целое число в данном случае идентификатор, который обозначает разрешение на использование команды .account addon, и таких там разрешений сотни, и у каждого свой идентификатор.
Не ошибается тот, кто ничего не делает.
Сообщение # 7 написано 09.09.2013 в 21:53
|
1)
Шо то я за вашими рассуждениями понаблюдала и не особо всё поняла. Вот ниже скрины. Скажите - куда ЕЩЁ добавить аккаунт с ID 2, чтобы были доступны все команды? Потому что если учитывать тот факт, что все 4 группы содержат в себе 41 роль, а 41 роль содержат в себе 50 пермиссионов. А мой аккаунт добавлен во ВСЕ 4 группы - то мне, получается, доступны все 41 роль и все 50 пермиссионов, а значит должны быть доступны и все 496 GM команд. Но это не так. Как минимум я ввела всего одну команду (.acc) и она уже не работала, а значит есть и еще много таких. Проверяла еще парочку. Тоже недоступны. Куда ж еще то свой аккаунт добавлять? 2) Цитата Т.е. 2 это роль, к которой относится разрешение (permission) с идентификатором 8 и с идентификатором 218 А где мне увидеть(найти) связь 2 роли с идентификатором 218 ? Если связь групп и ролей находится в rbac_groups_roles и нам это явно видно и понятно, то где найти связь с идентификаторами комманд? Потому что очень бы хотелось иметь такую возможность, как самовольная(РУЧНАЯ) выдача определенных конкретных ГМ-команд для несоответствующего команде уровня ГМ доступа. То есть, к примеру, выдать модератору .account set gmlevel или .achievment complete. Где и как привязать какую то ОДНУ конкретную команду к какому либо игровому аккаунту? Потому что с выходом этого гребаного RBAC это стало невозможно. Раньше в базе данных можно было понапридумывать хоть 15 уровней доступа вместо стандартных 4ех и в таблице commands вручную указать какому уровню доступа будет принадлежать каждая конкретная команда. Сейчас же с этими RBACами это невозможно. А хотя было КРАЙНЕ УДОБНО ! В принципе, моя основная конечная цель именно в этом и состоит - ИМЕТЬ ВОЗМОЖНОСТЬ ВРУЧНУЮ УСТАНОВИТЬ ЛЮБУЮ КОНКРЕТНУЮ КОМАНДУ ДЛЯ ЛЮБОГО ОТДЕЛЬНОГО ИГРОВОГО АККАУНТА 3) А чтобы я врубилась что там и как вычисляется - вот такой пример: Что нужно сделать, чтобы аккаунту с ID 3 были доступны ТОЛЬКО 2 команды с permission 228 и 462? 4) |
Ради прикола сделала:
Хотя уверена, что это не нужно. Так как роли УЖЕ входят в группы. Если я добавила себя в 1 группу - значит мне доступны роли 1, 6, 7, 34, 40. Это ясно по таблице rbac_group_roles и по их связи. А раз мне доступны роли 1, 6, 7, 34, 40 - то мне и доступны все пермиссионы с ними связанные (смотрим rbac_role_permissions). А уж если я нахожусь ВО ВСЕХ 4ех группах - то мне должно быть ДОСТУПНО ВСЁ ! Так было несколько месяцев назад, когда появилась система RBAC. Достаточно добавить свой аккаунт во все 4 группы и тебе доступны ВСЕ ГМ команды. А вот с этим новым обновлением и идентификаторами команд - куда бы я себя не добавляла - многий команды так и не работают. Исходя из последних двух скринов видим, что я (мой аккаунт) теперь ВЕЗДЕ !!! И во всех группах и во всех ролях и во всех пермиссионах. Захожу в мир, пишу .acc в ответ: Неправильный синтаксис. Норм ваапсче!
Сообщение # 10 написано 10.09.2013 в 00:51
|
1)
- Во первых permission не 50, а больше 300 со всеми последними апдейтами. - Во вторых, по факту, то что аккаунт добавлен во все четыре группы не значит что доступны все 496 комманд, доступны только те, что указаны в rbac_role_permission. - В третьих, что касается команды .acc, узнаем сперва permission команды (command) = 217, смотрим роль присущую для данного permission (rbac_role_permissions) = 1, и смотрим группу в которую входит эта роль (rbac_group_roles) = 1, а группа 1 (rbac_group) - это игрок, следовательно эта команда должна работать у обычных игроков (это я как пример построил цепочку логическую, а у Вас она не работает потому что нету permission 217 т.к. у Вас их всего 50.). - И в четвертых, аккаунт свой достаточно добавить только в таблицу rbac_account_groups под всеми группами, и будут доступны все команды. 2) А связь permission с определенной ролью смотреть в rbac_role_permissions, в Вашем примере: Код SELECT `roleId` FROM `rbac_role_permissions` WHERE `permissionId` = 218; Вам и покажут эту 2ю роль. А чтобы выдать определенные permissions аккаунту, для этого специально существует таблица rbac_account_permissions, или можно целую роль выделить в таблице rbac_account_roles. 3) Цитата Что нужно сделать, чтобы аккаунту с ID 3 были доступны ТОЛЬКО 2 команды с permission 228 и 462? Код INSERT INTO `rbac_account_permissions` VALUES (3, 228, 1, -1), (3, 462, 1, -1);
Не ошибается тот, кто ничего не делает.
|
О божечки! Как же стыыыдно! facepalm ......
Только после этих слов полезла разбирать проблему с самого нуля Цитата permission не 50, а больше 300 со всеми последними апдейтами. Обнаружила, что накатила апдейты баз world и characters, а про апдейты auth забыла. Поэтому в rbac_role_permissions было всего 50 строк вместо 307. Как часто это и бывает проблема уперлась в человеческую невнимательность. Не мой уровень. Поэтому так стыдно... Еще и ваше время потратила. Осталось разобрать только одну такую штуку. Как же всё таки замечательно, что теперь у КАЖДОЙ команды свой ID. Теперь, получается, можно выдавать любую одну команду любому аккаунту. Наконец то!!!!!!!!!! И самое важное: Хотелось бы разделить абсолютно ВСЕ команды так, чтоб у каждой был свой личный ID. Так как свой личный ID есть у команд, начинающихся с 217 и кончающихся на 471. Предыдущие 216 гм команд подогнаны под ОБЩИЕ IDшки, а именно 7, 8, 9, 10, 12 ПЕРВОЕ: Хотелось бы знать, а если я и их разделю на 216 разных ID - можно ли будет тогда И ИМИ играть в плане выдачи на конкретные аккаунты или все таки где то в .cpp-шках исходников это уже вбито мертвым грузом и без правки исходников не обойтись? ВТОРОЕ: И хотелось бы знать, если игрок находится только в ОДНОЙ группе Player, то когда я добавлю ему на аккаунт через rbac_account_permissions, к примеру, команду с ID 335, будет ли она у него РАБОТАТЬ? Или же все таки аккаунт придется добавлять в соответствующую группу еще. В данном случае команда с ID 335 принадлежит к группе 4 (Админы). Если так - то это бред и все эти обновления Тринити с БД команд коту под хвост. А вот если при условии, что игрок будет продолжать находиться в группе 1 (Player) и ему станет доступна 335 команда - то это ВЕЛИКОЛЕПНО !!! Что первое, что второе буду сегодня тестить. Почему то кажется что со вторым всё будет нормально. А вот с первым возникнут проблемы. Спасибо, ребят, за уделенное мне время. И еще раз извиняюсь за глупость. Обоим плюс в репу. :* PS для NO_MATTER Цитата И почему у тебя на втором и третьем скрине вместо значений (NULL)?? Там их нету, вот и нету у тебя прав. Впиши туда значения Не нужно всё таки туда ничего вписывать. С самого начала появления системы RBAC, чтобы игроку были доступны все команды - достаточно находиться в двух таблицах: account_access с уровнем доступа 4 rbac_account_groups во всех 4ех группах. Больше нигде аккаунт вбивать не нужно. |
1. Можно.
2. Да будет работать, для того эта таблица и создана, чтобы выдавать определенные permission для аккаунта, а rbac_account_groups - это для выдачи целой группы ролей, в которых еще в свою очередь много своих permission.
Не ошибается тот, кто ничего не делает.
|
А вот ни фига ни фига ни фигушечки. После сегодняшних ночных манипуляций с БД выяснила вот что:
1. Нет. Нельзя ! Так как значения в стобце permission таблицы world.command являются ни чем иным, как обычное напоминание, к какому именно permission команда относится в таблице auth.rbac_permissions. То есть смена значений данного столбца не приведет абсолютно ни к каким изменениям в системе, так как это банальная напоминалка! Вбито это всё намертво в ядре в исходниках. Привожу пример: Хочу выдать Гейм Мастеру команду .quest add, которая относится к permission 10 из таблицы auth.rbac_permissions. В таком случае мне надо вбить в таблице auth.rbac_account_permissions напротив его аккаунта в столбце permissionid значение = 10. НО !!! Тогда помимо команды .quest add к Игровому Мастеру прицепится еще туева хуча команд для полного управления сервером, а именно уровня Administrator, так как все команды из permission 10 - это Административные команды. И как ты с бубном не пляши в таблице world.command с командами уровня permission 10, на какое число не меняй - они всё равно программно уже забиты для 10ого permission из таблицы auth.rbac_permissions. В конечном итоге мы НЕ МОЖЕМ выдать Гейм Мастеру только НЕКОТОРЫЕ команды с уровня Администратор. Либо все, либо никаких. Как было раньше? В таблице world.command мы ставили напротив каждой команды в столбце security уровень доступа, какой нам вздумывалось. Могли разделить все команды хоть на 15 уровней доступа для более гибкого управления сервером и набора команды. Затем в таблице auth.account_access напротив определенного аккаунта мы ставили уровень доступа, например 8ой, и тогда аккаунту были доступны команды, которым мы назначили в таблице world.command security левел 8. Могли в 8 уровень добавить и команды игрока и некоторые Админские и некоторые ГМские. То есть вертели, как нам было удобно! Я считаю, что это была самая гибкая и идеальная система настройки доступа к командам! Нет - они придумали эти сраные RBAC и в конце концов поняли, что это оказывается неудобно. НО. Поняли НАПОЛОВИНУ! Объясняю, как: Разработчики Trinity Core тупо сдублировали кусок таблицы world.command в таблицу auth.rbac_permissions и уже ИМЕННО ОТТУДА у нас есть возможность действительно выдать на аккаунт ОТДЕЛЬНУЮ команду, которая будет у игрока сама по себе и никакие другие к ней не прилипнут. И опять таки. Набор этих команд, в принципе ничтожный и содержит только часть из world.command и в итоге все эти изменения бессмысленны, так как опять не дают нам полной свободы настройки команд и уровней доступа.! Да боже ты мой! Что за тупорылые разработчики Trinity Core?! Да сделайте вы уже так: Возьмите, скопируйте абсолютно все команды, а не половину, из world.command в auth.rbac_permissions и присвойте каждой СВОЙ НЕЗАВИСИМЫЙ порядковый номер, не объединяя их ни в какие группы (Player, Moderator, GM, Admin), чтобы мы (пользователи) смогли сами создать нужные нам группы и сами выбрать количество данных груп и уровней доступа. Например сделать 10 уровней. Для каждого выписать СВОЮ команду(ы), которая НАМ нужна и НАМ удобна! А не 4 стандартных и пляши, как хочешь. Выдал одну команду - к ней прицепилось еще 20. Есть на этом сайте люди, которые могут предложить эту идею разрабам Trinity Core? Эти разработчики вообще прислушиваются к мнению пользователей? У них там есть какой форум, обсуждения? Или они шпарят, что им вздумается и их прикалывает? Это, конечно, их право. Они никому ничем не обязаны. Да еще и распространяют такую вещь бесплатно. Если есть тут такие люди на сайте - напишите им, пожалуйста, на грамотном английском языке, описав эту проблему и предложив решение. Ведь эти разрабы уже и так САМИ к этому пришли. К возврату того, что каждую команду должно быть можно настраивать отдельно. Ведь пихнули же уже часть в auth.rbac_permissions из world.command. Так вот пусть разделят все команды из этих гребаных 4ех групп (Player, Moderator, GM, Admin) и присвоят каждой команде свой номер и перенесут их ВСЕ в auth.rbac_permissions. Сколько это будет длиться? Этот идиотизм никому неудобный.... Гори в аду разработчик RBAC !!!!!!!!!! Как раньше было все просто и удобно с auth.account_access.... И по поводу пункта 2. Да. Всё таки можно игроку, который находится в группе 1 (Player) присвоить какую то другую отдельную команду из более высоких уровней. Взять ее можно не из world.command, а из auth.rbac_permissions, которая по сути уже является пародией на world.command, но вот набор команд, который нам доступен для таких целей не слишком то и обширен. Но все таки можно, к примеру выдать игроку команду, допустим, .instance unbind, присвоив аккаунту игрока в таблице auth.rbac_account_permissions в столбце permissionid значение = 414 и команда корректно прилипнет к данному аккаунту без привязки за собой ище каких либо команд, так как имеет свой УНИКАЛЬНЫЙ порядковый номер. Вот так бы все команды были - было бы шикарно! Еще разок: если кто шарит в общении с разрабами Triinity Core - подтолкните их на осущестление того, что они осуществили наполовину. Спасибо за внимание. Надеюсь, эта тема, помимо выноса мозга, поможет ещё кому либо более четко понять нынешнюю систему выдачи доступа к командам. |
Таблица command - это обычный список команд, к которым можно выделять доступность на свое усмотрение, манипулируя таблицей rbac_role_permissions, это разные таблицы потому что одна повторяюсь - список команд, а вторая присвоение этих команд для определенных ролей.
Что касается команды .quest add, да разработчики решили ее внести в группу администраторов (10), но что мешает выдрать ее от туда? Ничего в ядре там не прицеплено, просто напросто необходимо создать отдельный permission в таблице rbac_permission с уникальным идентификатором для данной команды, и поставить в таблице command его у данной команды. В принципе можно переписать там все под себя, это же база данных, следовательно какие данные мы туда напишем такие хранится и будут, а в ядро они попадают в виде %d, %s - подобных меток, и выполняют там свои заданные роли. Можно удалить эти группы совсем (7 ,8, 9, 10) и сделать для каждой команды отдельный permission, но тогда придется очень долго добавлять необходимые команды для модераторов, гейм мастеров и др. поэтому они и внесены в группу, чтобы быстро это сделать.
Не ошибается тот, кто ничего не делает.
Сообщение # 15 написано 10.09.2013 в 12:09
|
Ну я так, кстати, делала. Создала новый permission в auth.rbac_permissions, задала ему порядковый номер 500, в таблице world.command напротив нужной мне команды ввела 500. Добавила permission 500 в auth.rbac_account_permissions для своего аккаунта.
Зашла в мир. И мне все так же доступны всё те же команды. Эта одна новая единственная не появилась. Из чего я делаю вывод, что БД это или не БД - но всё забито уже в исходниках. И ничего нового добавить нелтзя. Точнее можно, но оно не будет иметь никакой силы. Кстати, как я еще проверила, что вся инфа находится именно в ядре? Я удалила полностью все строки из таблиц auth.rbac_group_roles и auth.rbac_role_permissions То есть, что получается? Я удалила всю следственную связь. Выходит, что если я добавлю себя во все 4 группы - то у меня не будет ни одной команды, так как группы не знают с какими ролями они связаны, а роли не знают, с какими им связаться пермиссионами. НО! О, чудо! При входе в игровой мир у меня есть все команды для всех 4ех групп, несмотря на то, что таблицы auth.rbac_group_roles и auth.rbac_role_permissions абсолютно пустые. То есть я разорвала цепь посредине, но начало и конец все равно как то общаются. Из чего я делаю вывод, что информация заложена не в базе данных, а именно в исходниках ядра. И выдернуть одну команду никак не удастся из какой либо группы. Вот поэтому и считаю эту систему крайне печальной. Я уже на англоязычном форуме своим немного корявым английским попыталась попросить разрабов Trinity Core абсолютно все команды вытащить и выдать им отдельный ID в таблицу auth.rbac_permissions , ведь они то уже начали это делать. Уже половину команд скопипастили. Осталось только разорвать эти гребаные связи в этих 4ех группах и каждую команду сделать независимой. Вот тогда и можно будет выдавать игроку абсолюно любой набор команд, который будет удобен. Вот моя писанина, если интересно http://www.trinitycore.org/f/topic/9111-very-hard-to-set-up-please-lets-simplify-a-little/
Сообщение # 16 написано 10.09.2013 в 12:23
|
Ну я это проверить к сожалению не могу, да и все мои предыдущие высказывания не были утверждением т.к. я это не проверял, а просто логически предполагал.
Цитата Из чего я делаю вывод, что БД это или не БД - но всё забито уже в исходниках. И ничего нового добавить нелтзя. Точнее можно, но оно не будет иметь никакой силы. С какой целью тогда нужны эти таблицы, если все забито уже в исходниках? Логики нету. Добавлено (10.09.2013, 23:50)
Не ошибается тот, кто ничего не делает.
Сообщение # 17 написано 10.09.2013 в 23:50
|
Наконец то Девелоперы это изменили и всё таки выделили для КАЖДОЙ КОМАНДЫ из world.command свою уникальную строку в rbac.permissions и теперь мы имеем возможность кувыркаться с ГМ командами и настраивать как хотим под свои нужды для каждого отдельного аккаунта. Сделано это было 10 сентября 2013 года Девелопером по имени Jorge с ником Cpp- . Спасибо ему за это.
Хотя он до конца рьяно защищал эту систему и говорил, что она идеальна. Смотрите тут от 10 сентября: https://github.com/TrinityCore/TrinityCore/commits/master
Сообщение # 18 написано 12.09.2013 в 10:02
|
| |||
| |||