improved Has method in LabelPermissions; LabelChecker lambda reworked a bit

This commit is contained in:
Boris Tasevski 2022-07-19 15:30:04 +02:00
parent 19dff1ae5c
commit 3a183986c9
2 changed files with 4 additions and 9 deletions

View File

@ -190,11 +190,11 @@ LabelPermissions::LabelPermissions(const std::unordered_set<std::string> &grants
: grants_(grants), denies_(denies) {}
PermissionLevel LabelPermissions::Has(const std::string &permission) const {
if (denies_.find(permission) != denies_.end()) {
if ((denies_.size() == 1 && denies_.find(ASTERISK) != denies_.end()) || denies_.find(permission) != denies_.end()) {
return PermissionLevel::DENY;
}
if (grants_.find(permission) != denies_.end()) {
if ((grants_.size() == 1 && grants_.find(ASTERISK) != grants_.end()) || grants_.find(permission) != denies_.end()) {
return PermissionLevel::GRANT;
}

View File

@ -264,13 +264,8 @@ class LabelChecker final : public memgraph::query::LabelChecker {
explicit LabelChecker(memgraph::auth::User *user, memgraph::query::DbAccessor *dba) : user_{user}, dba_(dba) {}
bool IsUserAuthorized(const std::vector<memgraph::storage::LabelId> &labels) const final {
const auto user_label_permissions = user_->GetLabelPermissions();
auto *dba = dba_;
if (user_label_permissions.Has("*") == memgraph::auth::PermissionLevel::GRANT) return true;
return std::all_of(labels.begin(), labels.end(), [&user_label_permissions, dba](const auto label) {
return user_label_permissions.Has(dba->LabelToName(label)) == memgraph::auth::PermissionLevel::GRANT;
return std::any_of(labels.begin(), labels.end(), [this](const auto label) {
return user_->GetLabelPermissions().Has(dba_->LabelToName(label)) == memgraph::auth::PermissionLevel::GRANT;
});
}