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)) {}
45 const std::string& tool_name,
46 const std::string& pattern)
const {
47 for (
const auto& deny : deny_list_) {
48 if (pattern_matches(tool_name, pattern, deny)) {
49 logger->info(
"Permission DENIED: {} (matched '{}')",
68 const std::string& tool_name,
69 const std::string& pattern)
const {
70 for (
const auto& allow : allow_list_) {
71 if (pattern_matches(tool_name, pattern, allow)) {
72 logger->info(
"Permission ALLOWED: {} (matched '{}')",
95 const std::string& pattern,
bool allow) {
96 auto& list = allow ? allow_list_ : deny_list_;
97 for (
const auto& existing : list) {
98 if (existing == pattern) {
102 list.push_back(pattern);
103 logger->info(
"Added {} permission: {}",
104 allow ?
"allow" :
"deny", pattern);
124bool PermissionManager::pattern_matches(
125 const std::string& tool_name,
126 const std::string& full_pattern,
127 const std::string& permission_pattern) {
130 auto colon = permission_pattern.find(
':');
131 std::string pattern_tool = (colon != std::string::npos)
132 ? permission_pattern.substr(0, colon)
133 : permission_pattern;
136 if (fnmatch(pattern_tool.c_str(), tool_name.c_str(), 0) != 0) {
141 if (colon == std::string::npos) {
146 return fnmatch(permission_pattern.c_str(),
147 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.