#1 2014.07.17 18:43:53
0
MTA включает в себя полноценный Access Control List (ACL, список контроля доступа), позволяющий вам обезопашивать и ограничивать доступ к серверу, его функциям и ресурсам любыми способами, которыми вы пожелаете.
Ключевая концепция MTA'шного ACL (и ACL в целом) - то, что вы даете определенному объекту набор прав. В случае с MTA, объекты - это одно из двух: либо ресурсы, либо пользователи. В MTA доступно множество прав - они в основном сфокусированы на скриптинговых функциях серверной стороны.
По сути это значит, что ACL позволяет вам выбирать к использованию каких в точности функций могут иметь доступ ресурс или игрок. Очевидно, что эта возможность бесценна - например, можно не допустить возможность рядовых игроков сервера банить друг друга, или не дать вашим новым непротестированным ресурсам это делать.
Конечно, большая сила влечет за собой большую ответственность, и очень легко можно сломать ресурсы полностью - например, отключение spawnPlayer для всех ресурсов будет ОЧЕНЬ плохой идеей. В то же время, есть ситуации, когда вам может захотеться это сделать - если вы хотите принудить все свои ресурсы использовать ресурс spawn manager, например, но даже это несколько драконовские меры.
Понимание ACL
ACL состоит из двух важных компонентов: групп и ACL-списков. Они фигурируют как узлы <group name=""> и <acl name="" />. Их назначение:
1. Предоставить пользователям полномочия контролировать сервер и пользоваться командами ресура. Примеры:
- Позволить только админам использовать функцию giveweapon мода freeroam
- Позволить всем пользователям запускать ресурс
2. Предоставить ресурсам полномочия использовать функции скриптинга и функции других ресурсов. Примеры:
- Позволить ресурсу использовать функцию restartResource
- Позволить ресурсу использовать функцию call для использования экспортированных из другого скрипта функций
Группы по умолчанию
MTA предоставляет некоторые группы по умолчанию, в списке они по возрастанию полномочий. Эти группы:
Everyone
Moderator
SuperModerator
Admin
Console - Эта контролирует полномочия людей, которые используют консоль, через <object name="user.Console" />
RPC - Remote Procedure Call (Удаленный Вызов Процедуры). Конкретно эта предоставляет доступ только к callRemote и отключает команды ресурсов по умолчанию. Для подробностей смотрите саму функцию.
Для дальнейших объяснений, я воспользуюсь группой Everyone в качестве образца. По умолчанию это выглядит так:
Сначала вы заметите имя ACL-списка внутри группы. Он обозначает, какие у группы полномочия. Пользователи и ресурсы, принадлежные данной группе, будут иметь полномочия, указанные в acl-списке с названием "Default". Заметка: Вы увидите, что эта группа - особенная, в нее входит любой пользователь и ресурс, это благодаря использованию шаблона (*) на месте, где должно быть название пользователя или ресурса.
Теперь прокрутите далее вниз ACL'а и вы увидите acl-список <acl name="Default" />. Заметьте, что я значительно обрезал данный список из-за его длины.
Function - записи регулируют скриптинговые функции MTA. Например, если ресурсу понадобилось воспользоваться restartResource, а он лишь в группе 'Everyone' (с acl-списком 'Default'), ему будет отказано в доступе к restartResource и он откажется полноценно работать.
Command - записи регулируют использование команд, которые создаются при использовании ресурсом addCommandHandler'ов. Примером использования команды служит ввод в чате /createvehicle
[vehicle] при ресурсе freeroam. Данные записи контролируют, могут ли пользователи группы, использующей данный ACL-список, использовать эту команду. Заметка: команды не влияют на ресурсы внутри группы. Команды связаны только с пользователями.
General - самостоятельно придуманная группа записей, созданная ресурсом admin, хотя она работает по схожим принципам. Скрипт работает с ними через использование hasObjectPermissionTo
Вы заметите, что некоторые группы, такие как Admin, имеют несколько узлов <acl name="" />. Образцом далее служит группа Admin:
Это дает все полномочия, описанные в каждом из узлов <acl name="" />, по порядку списка. Так что, например, группа Admin благодаря использованию всех ACL-списков удостоверяется, что администраторам даются все полномочия. Если получается слишком много конфликтов, приоритет отдается самой нижней записи. В образце выше:
1.
2.
3. Для всех пользователей и ресурсов в группе admin будет:
Ключевая концепция MTA'шного ACL (и ACL в целом) - то, что вы даете определенному объекту набор прав. В случае с MTA, объекты - это одно из двух: либо ресурсы, либо пользователи. В MTA доступно множество прав - они в основном сфокусированы на скриптинговых функциях серверной стороны.
По сути это значит, что ACL позволяет вам выбирать к использованию каких в точности функций могут иметь доступ ресурс или игрок. Очевидно, что эта возможность бесценна - например, можно не допустить возможность рядовых игроков сервера банить друг друга, или не дать вашим новым непротестированным ресурсам это делать.
Конечно, большая сила влечет за собой большую ответственность, и очень легко можно сломать ресурсы полностью - например, отключение spawnPlayer для всех ресурсов будет ОЧЕНЬ плохой идеей. В то же время, есть ситуации, когда вам может захотеться это сделать - если вы хотите принудить все свои ресурсы использовать ресурс spawn manager, например, но даже это несколько драконовские меры.
Понимание ACL
ACL состоит из двух важных компонентов: групп и ACL-списков. Они фигурируют как узлы <group name=""> и <acl name="" />. Их назначение:
1. Предоставить пользователям полномочия контролировать сервер и пользоваться командами ресура. Примеры:
- Позволить только админам использовать функцию giveweapon мода freeroam
- Позволить всем пользователям запускать ресурс
2. Предоставить ресурсам полномочия использовать функции скриптинга и функции других ресурсов. Примеры:
- Позволить ресурсу использовать функцию restartResource
- Позволить ресурсу использовать функцию call для использования экспортированных из другого скрипта функций
Группы по умолчанию
MTA предоставляет некоторые группы по умолчанию, в списке они по возрастанию полномочий. Эти группы:
Everyone
Moderator
SuperModerator
Admin
Console - Эта контролирует полномочия людей, которые используют консоль, через <object name="user.Console" />
RPC - Remote Procedure Call (Удаленный Вызов Процедуры). Конкретно эта предоставляет доступ только к callRemote и отключает команды ресурсов по умолчанию. Для подробностей смотрите саму функцию.
Для дальнейших объяснений, я воспользуюсь группой Everyone в качестве образца. По умолчанию это выглядит так:
<group name="Everyone">
<acl name="Default" />
<object name="user.*" />
<object name="resource.*" />
</group>
Сначала вы заметите имя ACL-списка внутри группы. Он обозначает, какие у группы полномочия. Пользователи и ресурсы, принадлежные данной группе, будут иметь полномочия, указанные в acl-списке с названием "Default". Заметка: Вы увидите, что эта группа - особенная, в нее входит любой пользователь и ресурс, это благодаря использованию шаблона (*) на месте, где должно быть название пользователя или ресурса.
Теперь прокрутите далее вниз ACL'а и вы увидите acl-список <acl name="Default" />. Заметьте, что я значительно обрезал данный список из-за его длины.
<acl name="Default">
<right name="command.start" access="false" />
<right name="command.stop" access="false" />
<right name="command.stopall" access="false" />
...и т.д. и т.д...
<right name="function.executeCommandHandler" access="false" />
<right name="function.setPlayerMuted" access="false" />
<right name="function.restartResource" access="false" />
...и т.д. и т.д...
<right name="general.adminpanel" access="false" />
<right name="general.tab_players" access="false" />
<right name="general.tab_resources" access="false" />
...и т.д. и т.д...
<right name="command.freeze" access="false" />
<right name="command.shout" access="false" />
<right name="command.spectate" access="false" />
...и т.д. и т.д...
</acl>
Function - записи регулируют скриптинговые функции MTA. Например, если ресурсу понадобилось воспользоваться restartResource, а он лишь в группе 'Everyone' (с acl-списком 'Default'), ему будет отказано в доступе к restartResource и он откажется полноценно работать.
Command - записи регулируют использование команд, которые создаются при использовании ресурсом addCommandHandler'ов. Примером использования команды служит ввод в чате /createvehicle
[vehicle] при ресурсе freeroam. Данные записи контролируют, могут ли пользователи группы, использующей данный ACL-список, использовать эту команду. Заметка: команды не влияют на ресурсы внутри группы. Команды связаны только с пользователями.
General - самостоятельно придуманная группа записей, созданная ресурсом admin, хотя она работает по схожим принципам. Скрипт работает с ними через использование hasObjectPermissionTo
Вы заметите, что некоторые группы, такие как Admin, имеют несколько узлов <acl name="" />. Образцом далее служит группа Admin:
<group name="Admin">
<acl name="Moderator" />
<acl name="SuperModerator" />
<acl name="Admin" />
<acl name="RPC" />
<object name="resource.admin" />
<object name="resource.webadmin" />
<object name="user.Ransom" />
</group>
Это дает все полномочия, описанные в каждом из узлов <acl name="" />, по порядку списка. Так что, например, группа Admin благодаря использованию всех ACL-списков удостоверяется, что администраторам даются все полномочия. Если получается слишком много конфликтов, приоритет отдается самой нижней записи. В образце выше:
1.
<acl name="Default"> устанавливает <right name="general.http" access="false" /> <br\>
2.
<acl name="Admin"> устанавливает <right name="general.ModifyOtherObjects" access="true" /> <br\>
3. Для всех пользователей и ресурсов в группе admin будет:
<right name="general.ModifyOtherObjects" access="true" /><br\> <br\>