mirror of https://github.com/OpenRCT2/OpenRCT2.git
Use human-readable names for storing permissions
This commit is contained in:
parent
9d90a88461
commit
bf24f5eef8
|
@ -233,6 +233,20 @@ int NetworkActions::FindCommand(int command)
|
|||
return -1;
|
||||
}
|
||||
|
||||
int NetworkActions::FindCommandByPermissionName(const std::string &permission_name)
|
||||
{
|
||||
auto it = std::find_if(actions.begin(), actions.end(), [&permission_name](NetworkAction const& action) {
|
||||
if (action.permission_name == permission_name) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
if (it != actions.end()) {
|
||||
return it - actions.begin();
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
NetworkGroup::NetworkGroup()
|
||||
{
|
||||
actions_allowed = {0};
|
||||
|
@ -267,8 +281,11 @@ json_t * NetworkGroup::ToJson() const
|
|||
json_object_set_new(jsonGroup, "id", json_integer(id));
|
||||
json_object_set_new(jsonGroup, "name", json_string(GetName().c_str()));
|
||||
json_t * actionsArray = json_array();
|
||||
for (size_t i = 0; i < actions_allowed.size(); i++) {
|
||||
json_array_append_new(actionsArray, json_integer(actions_allowed[i]));
|
||||
for (size_t i = 0; i < gNetworkActions.actions.size(); i++) {
|
||||
if (CanPerformAction(i)) {
|
||||
const char * perm_name = gNetworkActions.actions[i].permission_name.c_str();
|
||||
json_array_append_new(actionsArray, json_string(perm_name));
|
||||
}
|
||||
}
|
||||
json_object_set_new(jsonGroup, "permissions", actionsArray);
|
||||
return jsonGroup;
|
||||
|
@ -286,13 +303,14 @@ NetworkGroup NetworkGroup::FromJson(const json_t * json)
|
|||
group.id = (uint8)json_integer_value(jsonId);
|
||||
group.name = std::string(json_string_value(jsonName));
|
||||
for (size_t i = 0; i < group.actions_allowed.size(); i++) {
|
||||
group.actions_allowed[i] = 0;
|
||||
}
|
||||
for (size_t i = 0; i < json_array_size(jsonPermissions); i++) {
|
||||
json_t * jsonPermissionValue = json_array_get(jsonPermissions, i);
|
||||
// This guards a case where there are less permissions in file than we want,
|
||||
// which could happen when we add permissions or user has malformed the file.
|
||||
if (jsonPermissionValue == nullptr) {
|
||||
group.actions_allowed[i] = 0;
|
||||
} else {
|
||||
group.actions_allowed[i] = (uint8)json_integer_value(jsonPermissionValue);
|
||||
const char * perm_name = json_string_value(jsonPermissionValue);
|
||||
int action_id = gNetworkActions.FindCommandByPermissionName(perm_name);
|
||||
if (action_id != -1) {
|
||||
group.ToggleActionPermission(action_id);
|
||||
}
|
||||
}
|
||||
return group;
|
||||
|
@ -308,7 +326,7 @@ void NetworkGroup::ToggleActionPermission(size_t index)
|
|||
actions_allowed[byte] ^= (1 << bit);
|
||||
}
|
||||
|
||||
bool NetworkGroup::CanPerformAction(size_t index)
|
||||
bool NetworkGroup::CanPerformAction(size_t index) const
|
||||
{
|
||||
size_t byte = index / 8;
|
||||
size_t bit = index % 8;
|
||||
|
@ -318,7 +336,7 @@ bool NetworkGroup::CanPerformAction(size_t index)
|
|||
return (actions_allowed[byte] & (1 << bit)) ? true : false;
|
||||
}
|
||||
|
||||
bool NetworkGroup::CanPerformCommand(int command)
|
||||
bool NetworkGroup::CanPerformCommand(int command) const
|
||||
{
|
||||
int action = gNetworkActions.FindCommand(command);
|
||||
if (action != -1) {
|
||||
|
|
|
@ -173,6 +173,7 @@ class NetworkAction
|
|||
{
|
||||
public:
|
||||
rct_string_id name;
|
||||
std::string permission_name;
|
||||
std::vector<int> commands;
|
||||
};
|
||||
|
||||
|
@ -180,27 +181,28 @@ class NetworkActions
|
|||
{
|
||||
public:
|
||||
int FindCommand(int command);
|
||||
int FindCommandByPermissionName(const std::string &permission_name);
|
||||
const std::vector<NetworkAction> actions = {
|
||||
{STR_ACTION_CHAT, {-1}},
|
||||
{STR_ACTION_TERRAFORM, {GAME_COMMAND_SET_LAND_HEIGHT, GAME_COMMAND_RAISE_LAND, GAME_COMMAND_LOWER_LAND, GAME_COMMAND_EDIT_LAND_SMOOTH, GAME_COMMAND_CHANGE_SURFACE_STYLE}},
|
||||
{STR_ACTION_SET_WATER_LEVEL, {GAME_COMMAND_SET_WATER_HEIGHT, GAME_COMMAND_RAISE_WATER, GAME_COMMAND_LOWER_WATER}},
|
||||
{STR_ACTION_TOGGLE_PAUSE, {GAME_COMMAND_TOGGLE_PAUSE}},
|
||||
{STR_ACTION_CREATE_RIDE, {GAME_COMMAND_CREATE_RIDE}},
|
||||
{STR_ACTION_REMOVE_RIDE, {GAME_COMMAND_DEMOLISH_RIDE}},
|
||||
{STR_ACTION_BUILD_RIDE, {GAME_COMMAND_PLACE_TRACK, GAME_COMMAND_REMOVE_TRACK, GAME_COMMAND_SET_MAZE_TRACK, GAME_COMMAND_PLACE_TRACK_DESIGN, GAME_COMMAND_PLACE_MAZE_DESIGN, GAME_COMMAND_PLACE_RIDE_ENTRANCE_OR_EXIT, GAME_COMMAND_REMOVE_RIDE_ENTRANCE_OR_EXIT}},
|
||||
{STR_ACTION_RIDE_PROPERTIES, {GAME_COMMAND_SET_RIDE_NAME, GAME_COMMAND_SET_RIDE_APPEARANCE, GAME_COMMAND_SET_RIDE_STATUS, GAME_COMMAND_SET_RIDE_VEHICLES, GAME_COMMAND_SET_RIDE_SETTING, GAME_COMMAND_SET_RIDE_PRICE, GAME_COMMAND_SET_BRAKES_SPEED}},
|
||||
{STR_ACTION_SCENERY, {GAME_COMMAND_REMOVE_SCENERY, GAME_COMMAND_PLACE_SCENERY, GAME_COMMAND_SET_BRAKES_SPEED, GAME_COMMAND_REMOVE_FENCE, GAME_COMMAND_PLACE_FENCE, GAME_COMMAND_REMOVE_LARGE_SCENERY, GAME_COMMAND_PLACE_LARGE_SCENERY, GAME_COMMAND_PLACE_BANNER, GAME_COMMAND_REMOVE_BANNER, GAME_COMMAND_SET_SCENERY_COLOUR, GAME_COMMAND_SET_FENCE_COLOUR, GAME_COMMAND_SET_LARGE_SCENERY_COLOUR, GAME_COMMAND_SET_BANNER_COLOUR, GAME_COMMAND_SET_BANNER_NAME, GAME_COMMAND_SET_SIGN_NAME, GAME_COMMAND_SET_BANNER_STYLE, GAME_COMMAND_SET_SIGN_STYLE}},
|
||||
{STR_ACTION_PATH, {GAME_COMMAND_PLACE_PATH, GAME_COMMAND_PLACE_PATH_FROM_TRACK, GAME_COMMAND_REMOVE_PATH}},
|
||||
{STR_ACTION_CLEAR_LANDSCAPE, {GAME_COMMAND_CLEAR_SCENERY}},
|
||||
{STR_ACTION_GUEST, {GAME_COMMAND_SET_GUEST_NAME}},
|
||||
{STR_ACTION_STAFF, {GAME_COMMAND_HIRE_NEW_STAFF_MEMBER, GAME_COMMAND_SET_STAFF_PATROL, GAME_COMMAND_FIRE_STAFF_MEMBER, GAME_COMMAND_SET_STAFF_ORDER, GAME_COMMAND_SET_STAFF_COLOUR, GAME_COMMAND_SET_STAFF_NAME}},
|
||||
{STR_ACTION_PARK_PROPERTIES, {GAME_COMMAND_SET_PARK_NAME, GAME_COMMAND_SET_PARK_OPEN, GAME_COMMAND_SET_PARK_ENTRANCE_FEE, GAME_COMMAND_SET_LAND_OWNERSHIP, GAME_COMMAND_BUY_LAND_RIGHTS, GAME_COMMAND_PLACE_PARK_ENTRANCE, GAME_COMMAND_REMOVE_PARK_ENTRANCE}},
|
||||
{STR_ACTION_PARK_FUNDING, {GAME_COMMAND_SET_CURRENT_LOAN, GAME_COMMAND_SET_RESEARCH_FUNDING, GAME_COMMAND_START_MARKETING_CAMPAIGN}},
|
||||
{STR_ACTION_KICK_PLAYER, {GAME_COMMAND_KICK_PLAYER}},
|
||||
{STR_ACTION_MODIFY_GROUPS, {GAME_COMMAND_MODIFY_GROUPS}},
|
||||
{STR_ACTION_SET_PLAYER_GROUP, {GAME_COMMAND_SET_PLAYER_GROUP}},
|
||||
{STR_ACTION_CHEAT, {GAME_COMMAND_CHEAT}},
|
||||
{STR_ACTION_TOGGLE_SCENERY_CLUSTER, {-2}}
|
||||
{STR_ACTION_CHAT, "PERMISSION_CHAT", {-1}},
|
||||
{STR_ACTION_TERRAFORM, "PERMISSION_TERRAFORM", {GAME_COMMAND_SET_LAND_HEIGHT, GAME_COMMAND_RAISE_LAND, GAME_COMMAND_LOWER_LAND, GAME_COMMAND_EDIT_LAND_SMOOTH, GAME_COMMAND_CHANGE_SURFACE_STYLE}},
|
||||
{STR_ACTION_SET_WATER_LEVEL, "PERMISSION_SET_WATER_LEVEL", {GAME_COMMAND_SET_WATER_HEIGHT, GAME_COMMAND_RAISE_WATER, GAME_COMMAND_LOWER_WATER}},
|
||||
{STR_ACTION_TOGGLE_PAUSE, "PERMISSION_TOGGLE_PAUSE", {GAME_COMMAND_TOGGLE_PAUSE}},
|
||||
{STR_ACTION_CREATE_RIDE, "PERMISSION_CREATE_RIDE", {GAME_COMMAND_CREATE_RIDE}},
|
||||
{STR_ACTION_REMOVE_RIDE, "PERMISSION_REMOVE_RIDE", {GAME_COMMAND_DEMOLISH_RIDE}},
|
||||
{STR_ACTION_BUILD_RIDE, "PERMISSION_BUILD_RIDE", {GAME_COMMAND_PLACE_TRACK, GAME_COMMAND_REMOVE_TRACK, GAME_COMMAND_SET_MAZE_TRACK, GAME_COMMAND_PLACE_TRACK_DESIGN, GAME_COMMAND_PLACE_MAZE_DESIGN, GAME_COMMAND_PLACE_RIDE_ENTRANCE_OR_EXIT, GAME_COMMAND_REMOVE_RIDE_ENTRANCE_OR_EXIT}},
|
||||
{STR_ACTION_RIDE_PROPERTIES, "PERMISSION_RIDE_PROPERTIES", {GAME_COMMAND_SET_RIDE_NAME, GAME_COMMAND_SET_RIDE_APPEARANCE, GAME_COMMAND_SET_RIDE_STATUS, GAME_COMMAND_SET_RIDE_VEHICLES, GAME_COMMAND_SET_RIDE_SETTING, GAME_COMMAND_SET_RIDE_PRICE, GAME_COMMAND_SET_BRAKES_SPEED}},
|
||||
{STR_ACTION_SCENERY, "PERMISSION_SCENERY", {GAME_COMMAND_REMOVE_SCENERY, GAME_COMMAND_PLACE_SCENERY, GAME_COMMAND_SET_BRAKES_SPEED, GAME_COMMAND_REMOVE_FENCE, GAME_COMMAND_PLACE_FENCE, GAME_COMMAND_REMOVE_LARGE_SCENERY, GAME_COMMAND_PLACE_LARGE_SCENERY, GAME_COMMAND_PLACE_BANNER, GAME_COMMAND_REMOVE_BANNER, GAME_COMMAND_SET_SCENERY_COLOUR, GAME_COMMAND_SET_FENCE_COLOUR, GAME_COMMAND_SET_LARGE_SCENERY_COLOUR, GAME_COMMAND_SET_BANNER_COLOUR, GAME_COMMAND_SET_BANNER_NAME, GAME_COMMAND_SET_SIGN_NAME, GAME_COMMAND_SET_BANNER_STYLE, GAME_COMMAND_SET_SIGN_STYLE}},
|
||||
{STR_ACTION_PATH, "PERMISSION_PATH", {GAME_COMMAND_PLACE_PATH, GAME_COMMAND_PLACE_PATH_FROM_TRACK, GAME_COMMAND_REMOVE_PATH}},
|
||||
{STR_ACTION_CLEAR_LANDSCAPE, "PERMISSION_CLEAR_LANDSCAPE", {GAME_COMMAND_CLEAR_SCENERY}},
|
||||
{STR_ACTION_GUEST, "PERMISSION_GUEST", {GAME_COMMAND_SET_GUEST_NAME}},
|
||||
{STR_ACTION_STAFF, "PERMISSION_STAFF", {GAME_COMMAND_HIRE_NEW_STAFF_MEMBER, GAME_COMMAND_SET_STAFF_PATROL, GAME_COMMAND_FIRE_STAFF_MEMBER, GAME_COMMAND_SET_STAFF_ORDER, GAME_COMMAND_SET_STAFF_COLOUR, GAME_COMMAND_SET_STAFF_NAME}},
|
||||
{STR_ACTION_PARK_PROPERTIES, "PERMISSION_PARK_PROPERTIES", {GAME_COMMAND_SET_PARK_NAME, GAME_COMMAND_SET_PARK_OPEN, GAME_COMMAND_SET_PARK_ENTRANCE_FEE, GAME_COMMAND_SET_LAND_OWNERSHIP, GAME_COMMAND_BUY_LAND_RIGHTS, GAME_COMMAND_PLACE_PARK_ENTRANCE, GAME_COMMAND_REMOVE_PARK_ENTRANCE}},
|
||||
{STR_ACTION_PARK_FUNDING, "PERMISSION_PARK_FUNDING", {GAME_COMMAND_SET_CURRENT_LOAN, GAME_COMMAND_SET_RESEARCH_FUNDING, GAME_COMMAND_START_MARKETING_CAMPAIGN}},
|
||||
{STR_ACTION_KICK_PLAYER, "PERMISSION_KICK_PLAYER", {GAME_COMMAND_KICK_PLAYER}},
|
||||
{STR_ACTION_MODIFY_GROUPS, "PERMISSION_MODIFY_GROUPS", {GAME_COMMAND_MODIFY_GROUPS}},
|
||||
{STR_ACTION_SET_PLAYER_GROUP, "PERMISSION_SET_PLAYER_GROUP", {GAME_COMMAND_SET_PLAYER_GROUP}},
|
||||
{STR_ACTION_CHEAT, "PERMISSION_CHEAT", {GAME_COMMAND_CHEAT}},
|
||||
{STR_ACTION_TOGGLE_SCENERY_CLUSTER, "PERMISSION_TOGGLE_SCENERY_CLUSTER", {-2}}
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -214,8 +216,8 @@ public:
|
|||
json_t * ToJson() const;
|
||||
static NetworkGroup FromJson(const json_t * json);
|
||||
void ToggleActionPermission(size_t index);
|
||||
bool CanPerformAction(size_t index);
|
||||
bool CanPerformCommand(int command);
|
||||
bool CanPerformAction(size_t index) const;
|
||||
bool CanPerformCommand(int command) const;
|
||||
const std::string& GetName() const;
|
||||
void SetName(std::string name);
|
||||
std::array<uint8, 8> actions_allowed;
|
||||
|
|
Loading…
Reference in New Issue