Skip to content
This repository has been archived by the owner on Sep 27, 2024. It is now read-only.

Commit

Permalink
refactor: refactor some api
Browse files Browse the repository at this point in the history
  • Loading branch information
engsr6982 committed May 31, 2024
1 parent 808d91f commit dcf2cf3
Show file tree
Hide file tree
Showing 6 changed files with 133 additions and 39 deletions.
12 changes: 9 additions & 3 deletions include/PermissionCore/PermissionManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,18 @@ class PermExports PermissionManager {
std::shared_ptr<PermissionCore> getPermissionCore(const std::string& pluginName);
bool unregisterPermissionCore(const std::string& pluginName);

bool hasRegisterPermissionCore(const std::string& pluginName);
[[deprecated]] bool hasRegisterPermissionCore(const std::string& pluginName);
bool hasPermissionCore(const std::string& pluginName);

std::vector<string> getAllKeys();
[[deprecated]] std::vector<string> getAllKeys();
std::vector<std::string> getAllPluginNames();

private:
PermissionManager() = default;
PermissionManager() = default;
~PermissionManager() = default;
PermissionManager(const PermissionManager&) = delete;
PermissionManager& operator=(const PermissionManager&) = delete;
// pluginName PermissionCore
std::unordered_map<std::string, std::shared_ptr<PermissionCore>> permissionCores;
};

Expand Down
25 changes: 20 additions & 5 deletions include/PermissionCore/PermissionRegister.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,31 @@ class PermExports PermissionRegister {
public:
static PermissionRegister& getInstance();

bool hasPermissionRegisted(const string& pluginName, const int& permissionValue);
// 弃用
[[deprecated]] bool hasPermissionRegisted(const string& pluginName, const int& permissionValue);

[[deprecated]] std::vector<group::Permission> getAllPermission(const string& pluginName);

[[deprecated]] std::vector<string> getAllKeys();


std::vector<string> getAllPluginNames();

bool hasPlugin(const string& pluginName);

bool hasPermission(const string& pluginName, const int& permissionValue);

bool registerPermission(const string& pluginName, const int& permissionValue, const string permissionName);

bool unRegisterPermission(const string& pluginName, const int& permissionValue);

std::vector<group::Permission> getAllPermission(const string& pluginName);
std::optional<group::Permission> getPermission(const string& pluginName, const int& permissionValue);
string getPermissionName(const string& pluginName, const int& permissionValue);
int getPermissionValue(const string& pluginName, const string& permissionName);

std::vector<string> getAllKeys();
std::vector<group::Permission> getPermissions(const string& pluginName);

string getPermissionName(const string& pluginName, const int& permissionValue);

int getPermissionValue(const string& pluginName, const string& permissionName);

private:
PermissionRegister() = default;
Expand Down
40 changes: 31 additions & 9 deletions src/Backend/API.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "API.h"
#include "fmt/compile.h"
#include "hv/json.hpp"
#include <filesystem>
#include <fstream>
#include <sstream>
Expand All @@ -26,22 +27,43 @@ void startAPIServerThread() {
// 注册路由
router.GET("/api/validate", [cfg](HttpRequest* req, HttpResponse* res) { CheckToken_RS(req, res, cfg); });

// Query => plugin/perm
router.GET("/api/query/{type}", [cfg](const HttpContextPtr& ctx) {
// Query => plugin/perm/group
router.GET("/api/query", [cfg](const HttpContextPtr& ctx) {
CheckToken_CTX(ctx, cfg);
string type = ctx->param("type");
auto& pm = pmc::PermissionManager::getInstance();
string type = ctx->param("type");
string plugin = ctx->param("plugin");

hv::Json res;
res["type"] = type;
int code = 200;
string message = "OK";

// 查询指定类型数据
if (type == "plugin") {
res["data"] = pmc::PermissionManager::getInstance().getAllKeys();
res["data"] = pm.getAllKeys();
} else if (type == "perm") {

auto pem = pmc::PermissionRegister::getInstance();
} else if (type == "group") {
if (pm.hasRegisterPermissionCore(plugin)) {
nlohmann::json j = nlohmann::json::array();
// 遍历vector
for (auto g : pm.getPermissionCore(plugin)->getAllGroups()) {
j.push_back(g.toJson());
}
res["data"] = j;
} else {
code = 404;
message = "Not Found";
}
} else {
res["status"] = 400;
res["message"] = "Bad Request";
code = 400;
message = "Bad Request";
}
// 设置成功状态码和消息
res["type"] = type;
res["plugin"] = plugin;
res["status"] = code;
res["message"] = message;
// 发送响应
return ctx->sendJson(res);
});
Expand All @@ -54,7 +76,7 @@ void startAPIServerThread() {
svr.start();
logger.info("Start api server on 127.0.0.1:{0}."_tr(cfg.Port));
if (cfg.Token == "default_token") {
logger.warn("Token is not set, please set it in config.toml."_tr());
logger.warn("Please don't use default token in production environment."_tr());
}
}

Expand Down
34 changes: 17 additions & 17 deletions src/Command/Command.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ struct AddOrDelPermToGroup {
int permValue;
};

enum CreatOrDelete : int { Creat = 1, Delete = 0 };
enum CreatOrDelete : int { Create = 1, Delete = 0 };
struct CreatOrDeleteGroup {
CreatOrDelete c_or_d;
string pluginName;
Expand All @@ -55,10 +55,10 @@ struct ListPlugin {
};

void registerCommand() {
auto& cmd = ll::command::CommandRegistrar::getInstance().getOrCreateCommand("permc");
auto& cmd = ll::command::CommandRegistrar::getInstance().getOrCreateCommand("pmc");
auto core = pmc::PermissionManager::getInstance().getPermissionCore("PermissionCore");

// permc 打开Gui
// pmc 打开Gui
cmd.overload().execute([&](CommandOrigin const& origin, CommandOutput& output) {
CHECK_COMMAND_TYPE(output, origin.getOriginType(), CommandOriginType::Player);
Actor* entity = origin.getEntity();
Expand All @@ -69,7 +69,7 @@ void registerCommand() {
}
});

// permc list perm [pluginName] [permValue] 列出插件所有权限值、列出插件的权限详细信息
// pmc list perm [pluginName] [permValue] 列出插件所有权限值、列出插件的权限详细信息
cmd.overload<ListPerm>()
.text("list")
.text("perm")
Expand Down Expand Up @@ -119,7 +119,7 @@ void registerCommand() {
}
});

// permc list group <pluginName> [groupName] 列出插件所有的组、列出插件的组详细信息
// pmc list group <pluginName> [groupName] 列出插件所有的组、列出插件的组详细信息
cmd.overload<ListGroup>()
.text("list")
.text("group")
Expand All @@ -137,7 +137,7 @@ void registerCommand() {
if (!player.isOperator()) return noPermission(output);
}
PermissionManager& manager = PermissionManager::getInstance();
if (manager.hasRegisterPermissionCore(param.pluginName)) {
if (manager.hasPermissionCore(param.pluginName)) {
PermissionCore& core = *manager.getPermissionCore(param.pluginName);
if (param.groupName.empty()) {
auto allGroups = core.getAllGroups();
Expand All @@ -160,7 +160,7 @@ void registerCommand() {
}
});

// permc list plugin 列出所有插件
// pmc list plugin 列出所有插件
cmd.overload<ListPlugin>().text("list").text("plugin").execute([&](CommandOrigin const& origin,
CommandOutput& output) {
CHECK_COMMAND_TYPE(
Expand All @@ -183,7 +183,7 @@ void registerCommand() {
output.success("Total {} plugins registered.", keys.size());
});

// permc group <create|delete> <pluginName> <groupName> 添加、删除组
// pmc group <create|delete> <pluginName> <groupName> 添加、删除组
cmd.overload<CreatOrDeleteGroup>()
.text("group")
.required("c_or_d")
Expand All @@ -201,10 +201,10 @@ void registerCommand() {
if (!player.isOperator()) return noPermission(output);
}
PermissionManager& manager = PermissionManager::getInstance();
if (manager.hasRegisterPermissionCore(param.pluginName)) {
if (manager.hasPermissionCore(param.pluginName)) {
PermissionCore& core = *manager.getPermissionCore(param.pluginName);
switch (param.c_or_d) {
case CreatOrDelete::Creat: {
case CreatOrDelete::Create: {
bool status = core.createGroup(param.groupName);
output.success("Add group '{}' in plugin '{}' state '{}'"_tr(
param.groupName,
Expand All @@ -226,7 +226,7 @@ void registerCommand() {
}
});

// permc user <add|del> <pluginName> <groupName> <target Player> 添加、删除用户到组
// pmc user <add|del> <pluginName> <groupName> <target Player> 添加、删除用户到组
cmd.overload<AddOrDelUserWithTarget>()
.text("user")
.required("add_del")
Expand All @@ -247,7 +247,7 @@ void registerCommand() {
}
// processing...
PermissionManager& manager = PermissionManager::getInstance();
if (manager.hasRegisterPermissionCore(param.pluginName)) {
if (manager.hasPermissionCore(param.pluginName)) {
PermissionCore& core = *manager.getPermissionCore(param.pluginName);

if (core.hasGroup(param.groupName)) {
Expand Down Expand Up @@ -286,7 +286,7 @@ void registerCommand() {
}
});

// permc user <add|del> <pluginName> <groupName> <string realName> 添加、删除用户到组
// pmc user <add|del> <pluginName> <groupName> <string realName> 添加、删除用户到组
cmd.overload<AddOrDelUserWithRealName>()
.text("user")
.required("add_del")
Expand All @@ -307,7 +307,7 @@ void registerCommand() {
}
// processing...
PermissionManager& manager = PermissionManager::getInstance();
if (manager.hasRegisterPermissionCore(param.pluginName)) {
if (manager.hasPermissionCore(param.pluginName)) {
PermissionCore& core = *manager.getPermissionCore(param.pluginName);
if (core.hasGroup(param.groupName)) {
auto pl = ll::service::getLevel()->getPlayer(param.realName);
Expand Down Expand Up @@ -344,7 +344,7 @@ void registerCommand() {
}
});

// permc perm <add|del> <pluginName> <groupName> <value> 添加、删除权限到组
// pmc perm <add|del> <pluginName> <groupName> <value> 添加、删除权限到组
cmd.overload<AddOrDelPermToGroup>()
.text("perm")
.required("add_del")
Expand All @@ -365,11 +365,11 @@ void registerCommand() {
}
// processing...
PermissionManager& manager = PermissionManager::getInstance();
if (manager.hasRegisterPermissionCore(param.pluginName)) {
if (manager.hasPermissionCore(param.pluginName)) {
PermissionCore& core = *manager.getPermissionCore(param.pluginName);
if (core.hasGroup(param.groupName)) {
PermissionRegister registerInst = PermissionRegister::getInstance();
if (registerInst.hasPermissionRegisted(param.pluginName, param.permValue)) {
if (registerInst.hasPermission(param.pluginName, param.permValue)) {
auto perm = registerInst.getPermission(param.pluginName, param.permValue);
switch (param.add_del) {
case OperationAddOrDel::add: {
Expand Down
17 changes: 14 additions & 3 deletions src/PermissionCore/PermissionManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,22 @@ bool PermissionManager::unregisterPermissionCore(const std::string& pluginName)
return false;
}

bool PermissionManager::hasRegisterPermissionCore(const std::string& pluginName) {
bool PermissionManager::hasRegisterPermissionCore(const std::string& pluginName) { // deprecated
return permissionCores.find(pluginName) != permissionCores.end();
}
bool PermissionManager::hasPermissionCore(const std::string& pluginName) {
return permissionCores.find(pluginName) != permissionCores.end();
}


std::vector<string> PermissionManager::getAllKeys() {
std::vector<string> PermissionManager::getAllKeys() { // deprecated
std::vector<string> keys;
for (const auto& pair : permissionCores) {
keys.push_back(pair.first);
}
return keys;
}
std::vector<string> PermissionManager::getAllPluginNames() {
std::vector<string> keys;
for (const auto& pair : permissionCores) {
keys.push_back(pair.first);
Expand All @@ -58,7 +69,7 @@ std::vector<string> PermissionManager::getAllKeys() {
void AutoRegisterCoreToManager(const std::string& pluginName) {
auto __TryRegisterCore = std::make_shared<PermissionCore>(pluginName);
bool __TryRegisterToManager =
PermissionManager::getInstance().registerPermissionCore(pluginName, __TryRegisterCore);
PermissionManager::getInstance().registerPermissionCore(std::string(pluginName), __TryRegisterCore);
if (!__TryRegisterToManager) {
throw std::runtime_error("Plugin registration failed: '{}'"_tr(pluginName));
}
Expand Down
44 changes: 42 additions & 2 deletions src/PermissionCore/PermissionRegister.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ PermissionRegister& PermissionRegister::getInstance() {
return instance;
}

// deprecated
bool PermissionRegister::hasPermissionRegisted(const string& pluginName, const int& permissionValue) {
auto it = mRegisterData.find(pluginName);
if (it != mRegisterData.end()) {
Expand All @@ -23,13 +24,25 @@ bool PermissionRegister::hasPermissionRegisted(const string& pluginName, const i
}
return false;
}
bool PermissionRegister::hasPermission(const string& pluginName, const int& permissionValue) {
auto it = mRegisterData.find(pluginName);
if (it != mRegisterData.end()) {
auto& permissionVec = it->second;
return std::any_of(
permissionVec.begin(),
permissionVec.end(),
[&permissionValue](const group::Permission& permission) { return permission.value == permissionValue; }
);
}
return false;
}

bool PermissionRegister::registerPermission(
const string& pluginName,
const int& permissionValue,
const string permissionName
) {
if (hasPermissionRegisted(pluginName, permissionValue)) return false;
if (hasPermission(pluginName, permissionValue)) return false;
mRegisterData[pluginName].push_back({permissionName, permissionValue});
return true;
}
Expand All @@ -50,13 +63,21 @@ bool PermissionRegister::unRegisterPermission(const string& pluginName, const in
return false;
}

// deprecated
std::vector<group::Permission> PermissionRegister::getAllPermission(const string& pluginName) {
auto it = mRegisterData.find(pluginName);
if (it != mRegisterData.end()) {
return it->second;
}
return {};
}
std::vector<group::Permission> PermissionRegister::getPermissions(const string& pluginName) {
auto it = mRegisterData.find(pluginName);
if (it != mRegisterData.end()) {
return it->second;
}
return {};
}

std::optional<group::Permission>
PermissionRegister::getPermission(const string& pluginName, const int& permissionValue) {
Expand Down Expand Up @@ -104,12 +125,31 @@ int PermissionRegister::getPermissionValue(const string& pluginName, const strin
return -1;
}

std::vector<string> PermissionRegister::getAllKeys() {
std::vector<string> PermissionRegister::getAllKeys() { // deprecated
std::vector<string> keys(mRegisterData.size());
std::transform(mRegisterData.begin(), mRegisterData.end(), keys.begin(), [](const auto& pair) {
return pair.first;
});
return keys;
}
std::vector<string> PermissionRegister::getAllPluginNames() {
std::vector<string> keys(mRegisterData.size());
std::transform(mRegisterData.begin(), mRegisterData.end(), keys.begin(), [](const auto& pair) {
return pair.first;
});
return keys;
}

bool PermissionRegister::hasPlugin(const string& pluginName) {
bool isExist = false;
for (auto& [key, value] : mRegisterData) {
if (key == pluginName) {
isExist = true;
break;
}
}
return isExist;
}


} // namespace pmc

0 comments on commit dcf2cf3

Please sign in to comment.