25 std::vector<std::string> allow_patterns,
26 std::vector<std::string> deny_patterns)
27 : allow_list_(std::move(allow_patterns)),
28 deny_list_(std::move(deny_patterns)) {}
39 const std::string& tool_name,
40 const std::string& pattern)
const {
41 for (
const auto& deny : deny_list_) {
42 if (pattern_matches(tool_name, pattern, deny)) {
43 logger->info(
"Permission DENIED: {} (matched '{}')",
60 const std::string& tool_name,
61 const std::string& pattern)
const {
62 for (
const auto& allow : allow_list_) {
63 if (pattern_matches(tool_name, pattern, allow)) {
64 logger->info(
"Permission ALLOWED: {} (matched '{}')",
80 const std::string& pattern,
bool allow) {
81 auto& list = allow ? allow_list_ : deny_list_;
82 for (
const auto& existing : list) {
83 if (existing == pattern) {
87 list.push_back(pattern);
88 logger->info(
"Added {} permission: {}",
89 allow ?
"allow" :
"deny", pattern);
101bool PermissionManager::pattern_matches(
102 const std::string& tool_name,
103 const std::string& full_pattern,
104 const std::string& permission_pattern) {
107 auto colon = permission_pattern.find(
':');
108 std::string pattern_tool = (colon != std::string::npos)
109 ? permission_pattern.substr(0, colon)
110 : permission_pattern;
113 if (fnmatch(pattern_tool.c_str(), tool_name.c_str(), 0) != 0) {
118 if (colon == std::string::npos) {
123 return fnmatch(permission_pattern.c_str(),
124 full_pattern.c_str(), 0) == 0;
bool is_denied(const std::string &tool_name, const std::string &pattern) const
Check if a tool call is explicitly denied.
PermissionManager(std::vector< std::string > allow_patterns={}, std::vector< std::string > deny_patterns={})
Construct with initial allow/deny lists.
void add_permission(const std::string &pattern, bool allow)
Add a permission pattern at runtime.
bool is_allowed(const std::string &tool_name, const std::string &pattern) const
Check if a tool call is explicitly allowed (skip prompting).
spdlog initialization and logger access.
ENTROPIC_EXPORT std::shared_ptr< spdlog::logger > get(const std::string &name)
Get or create a named logger.
Activate model on GPU (WARM → ACTIVE).
Permission manager for MCP tool access control.