mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-24 22:24:44 +02:00
FilterUtility: Outsource permission matching from CheckPermission() to a separate method
This commit is contained in:
parent
14e4f6b921
commit
1bb2d65a8d
@ -124,13 +124,27 @@ static void FilteredAddTarget(ScriptFrame& permissionFrame, Expression *permissi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FilterUtility::CheckPermission(const ApiUser::Ptr& user, const String& permission, Expression **permissionFilter)
|
/**
|
||||||
|
* Checks whether the given API user is granted the given permission
|
||||||
|
*
|
||||||
|
* When you desire an exception to be raised when the given user doesn't have the given permission,
|
||||||
|
* you need to use FilterUtility::CheckPermission().
|
||||||
|
*
|
||||||
|
* @param user ApiUser pointer to the user object you want to check the permission of
|
||||||
|
* @param permission The actual permission you want to check the user permission against
|
||||||
|
* @param permissionFilter Expression pointer that is used as an output buffer for all the filter expressions of the
|
||||||
|
* individual permissions of the given user to be evaluated. It's up to the caller to delete
|
||||||
|
* this pointer when it's not needed any more.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
bool FilterUtility::HasPermission(const ApiUser::Ptr& user, const String& permission, Expression **permissionFilter)
|
||||||
{
|
{
|
||||||
if (permissionFilter)
|
if (permissionFilter)
|
||||||
*permissionFilter = nullptr;
|
*permissionFilter = nullptr;
|
||||||
|
|
||||||
if (permission.IsEmpty())
|
if (permission.IsEmpty())
|
||||||
return;
|
return true;
|
||||||
|
|
||||||
bool foundPermission = false;
|
bool foundPermission = false;
|
||||||
String requiredPermission = permission.ToLower();
|
String requiredPermission = permission.ToLower();
|
||||||
@ -172,8 +186,15 @@ void FilterUtility::CheckPermission(const ApiUser::Ptr& user, const String& perm
|
|||||||
if (!foundPermission) {
|
if (!foundPermission) {
|
||||||
Log(LogWarning, "FilterUtility")
|
Log(LogWarning, "FilterUtility")
|
||||||
<< "Missing permission: " << requiredPermission;
|
<< "Missing permission: " << requiredPermission;
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_THROW_EXCEPTION(ScriptError("Missing permission: " + requiredPermission));
|
return foundPermission;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FilterUtility::CheckPermission(const ApiUser::Ptr& user, const String& permission, Expression **permissionFilter)
|
||||||
|
{
|
||||||
|
if (!HasPermission(user, permission, permissionFilter)) {
|
||||||
|
BOOST_THROW_EXCEPTION(ScriptError("Missing permission: " + permission.ToLower()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,6 +52,7 @@ class FilterUtility
|
|||||||
public:
|
public:
|
||||||
static Type::Ptr TypeFromPluralName(const String& pluralName);
|
static Type::Ptr TypeFromPluralName(const String& pluralName);
|
||||||
static void CheckPermission(const ApiUser::Ptr& user, const String& permission, Expression **filter = nullptr);
|
static void CheckPermission(const ApiUser::Ptr& user, const String& permission, Expression **filter = nullptr);
|
||||||
|
static bool HasPermission(const ApiUser::Ptr& user, const String& permission, Expression **permissionFilter = nullptr);
|
||||||
static std::vector<Value> GetFilterTargets(const QueryDescription& qd, const Dictionary::Ptr& query,
|
static std::vector<Value> GetFilterTargets(const QueryDescription& qd, const Dictionary::Ptr& query,
|
||||||
const ApiUser::Ptr& user, const String& variableName = String());
|
const ApiUser::Ptr& user, const String& variableName = String());
|
||||||
static bool EvaluateFilter(ScriptFrame& frame, Expression *filter,
|
static bool EvaluateFilter(ScriptFrame& frame, Expression *filter,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user