blob: 927280f867893662c31926345bdb967c158b8e03 [file] [log] [blame]
/*
* Copyright 2020 The casbin Authors. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "casbin/pch.h"
#ifndef MANAGEMENT_API_CPP
#define MANAGEMENT_API_CPP
#include "casbin/enforcer.h"
namespace casbin {
// GetAllSubjects gets the list of subjects that show up in the current policy.
std::vector<std::string> Enforcer ::GetAllSubjects() {
return m_model->GetValuesForFieldInPolicyAllTypes("p", 0);
}
// GetAllNamedSubjects gets the list of subjects that show up in the current named policy.
std::vector<std::string> Enforcer ::GetAllNamedSubjects(const std::string& p_type) {
return m_model->GetValuesForFieldInPolicy("p", p_type, 0);
}
// GetAllObjects gets the list of objects that show up in the current policy.
std::vector<std::string> Enforcer ::GetAllObjects() {
return m_model->GetValuesForFieldInPolicyAllTypes("p", 1);
}
// GetAllNamedObjects gets the list of objects that show up in the current named policy.
std::vector<std::string> Enforcer ::GetAllNamedObjects(const std::string& p_type) {
return m_model->GetValuesForFieldInPolicy("p", p_type, 1);
}
// GetAllActions gets the list of actions that show up in the current policy.
std::vector<std::string> Enforcer ::GetAllActions() {
return m_model->GetValuesForFieldInPolicyAllTypes("p", 2);
}
// GetAllNamedActions gets the list of actions that show up in the current named policy.
std::vector<std::string> Enforcer ::GetAllNamedActions(const std::string& p_type) {
return m_model->GetValuesForFieldInPolicy("p", p_type, 2);
}
// GetAllRoles gets the list of roles that show up in the current policy.
std::vector<std::string> Enforcer ::GetAllRoles() {
return m_model->GetValuesForFieldInPolicyAllTypes("g", 1);
}
// GetAllNamedRoles gets the list of roles that show up in the current named policy.
std::vector<std::string> Enforcer ::GetAllNamedRoles(const std::string& p_type) {
return m_model->GetValuesForFieldInPolicy("g", p_type, 1);
}
// GetPolicy gets all the authorization rules in the policy.
PoliciesValues Enforcer ::GetPolicy() {
return this->GetNamedPolicy("p");
}
// GetFilteredPolicy gets all the authorization rules in the policy, field filters can be specified.
PoliciesValues Enforcer ::GetFilteredPolicy(int field_index, const std::vector<std::string>& field_values) {
return this->GetFilteredNamedPolicy("p", field_index, field_values);
}
// GetNamedPolicy gets all the authorization rules in the named policy.
PoliciesValues Enforcer ::GetNamedPolicy(const std::string& p_type) {
return m_model->GetPolicy("p", p_type);
}
// GetFilteredNamedPolicy gets all the authorization rules in the named policy, field filters can be specified.
PoliciesValues Enforcer ::GetFilteredNamedPolicy(const std::string& p_type, int field_index, const std::vector<std::string>& field_values) {
return m_model->GetFilteredPolicy("p", p_type, field_index, field_values);
}
// GetGroupingPolicy gets all the role inheritance rules in the policy.
PoliciesValues Enforcer ::GetGroupingPolicy() {
return this->GetNamedGroupingPolicy("g");
}
// GetFilteredGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified.
PoliciesValues Enforcer ::GetFilteredGroupingPolicy(int field_index, const std::vector<std::string>& field_values) {
return this->GetFilteredNamedGroupingPolicy("g", field_index, field_values);
}
// GetNamedGroupingPolicy gets all the role inheritance rules in the policy.
PoliciesValues Enforcer ::GetNamedGroupingPolicy(const std::string& p_type) {
return m_model->GetPolicy("g", p_type);
}
// GetFilteredNamedGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified.
PoliciesValues Enforcer ::GetFilteredNamedGroupingPolicy(const std::string& p_type, int field_index, const std::vector<std::string>& field_values) {
return m_model->GetFilteredPolicy("g", p_type, field_index, field_values);
}
// HasPolicy determines whether an authorization rule exists.
bool Enforcer ::HasPolicy(const std::vector<std::string>& params) {
return this->HasNamedPolicy("p", params);
}
// HasNamedPolicy determines whether a named authorization rule exists.
bool Enforcer ::HasNamedPolicy(const std::string& p_type, const std::vector<std::string>& params) {
if (params.size() == 1) {
std::vector<std::string> str_slice{params[0]};
return m_model->HasPolicy("p", p_type, str_slice);
}
std::vector<std::string> policy;
for (int i = 0; i < params.size(); i++)
policy.push_back(params[i]);
return m_model->HasPolicy("p", p_type, policy);
}
// AddPolicy adds an authorization rule to the current policy.
// If the rule already exists, the function returns false and the rule will not be added.
// Otherwise the function returns true by adding the new rule.
bool Enforcer ::AddPolicy(const std::vector<std::string>& params) {
return this->AddNamedPolicy("p", params);
}
// AddPolicies adds authorization rules to the current policy.
// If the rule already exists, the function returns false for the corresponding rule and the rule will not be added.
// Otherwise the function returns true for the corresponding rule by adding the new rule.
bool Enforcer ::AddPolicies(const PoliciesValues& rules) {
return this->AddNamedPolicies("p", rules);
}
// AddNamedPolicy adds an authorization rule to the current named policy.
// If the rule already exists, the function returns false and the rule will not be added.
// Otherwise the function returns true by adding the new rule.
bool Enforcer ::AddNamedPolicy(const std::string& p_type, const std::vector<std::string>& params) {
if (params.size() == 1) {
std::vector<std::string> str_slice{params[0]};
return this->addPolicy("p", p_type, str_slice);
}
return this->addPolicy("p", p_type, params);
}
// AddNamedPolicies adds authorization rules to the current named policy.
// If the rule already exists, the function returns false for the corresponding rule and the rule will not be added.
// Otherwise the function returns true for the corresponding by adding the new rule.
bool Enforcer ::AddNamedPolicies(const std::string& p_type, const PoliciesValues& rules) {
return this->addPolicies("p", p_type, rules);
}
// RemovePolicy removes an authorization rule from the current policy.
bool Enforcer ::RemovePolicy(const std::vector<std::string>& params) {
return this->RemoveNamedPolicy("p", params);
}
// RemovePolicies removes authorization rules from the current policy.
bool Enforcer ::RemovePolicies(const PoliciesValues& rules) {
return this->RemoveNamedPolicies("p", rules);
}
// RemoveFilteredPolicy removes an authorization rule from the current policy, field filters can be specified.
bool Enforcer ::RemoveFilteredPolicy(int field_index, const std::vector<std::string>& field_values) {
return this->RemoveFilteredNamedPolicy("p", field_index, field_values);
}
// RemoveNamedPolicy removes an authorization rule from the current named policy.
bool Enforcer ::RemoveNamedPolicy(const std::string& p_type, const std::vector<std::string>& params) {
if (params.size() == 1) {
std::vector<std::string> str_slice{params[0]};
return this->removePolicy("p", p_type, str_slice);
}
std::vector<std::string> policy;
for (int i = 0; i < params.size(); i++)
policy.push_back(params[i]);
return this->removePolicy("p", p_type, policy);
}
// RemoveNamedPolicies removes authorization rules from the current named policy.
bool Enforcer ::RemoveNamedPolicies(const std::string& p_type, const PoliciesValues& rules) {
return this->removePolicies("p", p_type, rules);
}
// RemoveFilteredNamedPolicy removes an authorization rule from the current named policy, field filters can be specified.
bool Enforcer ::RemoveFilteredNamedPolicy(const std::string& p_type, int field_index, const std::vector<std::string>& field_values) {
return this->removeFilteredPolicy("p", p_type, field_index, field_values);
}
// HasGroupingPolicy determines whether a role inheritance rule exists.
bool Enforcer ::HasGroupingPolicy(const std::vector<std::string>& params) {
return this->HasNamedGroupingPolicy("g", params);
}
// HasNamedGroupingPolicy determines whether a named role inheritance rule exists.
bool Enforcer ::HasNamedGroupingPolicy(const std::string& p_type, const std::vector<std::string>& params) {
if (params.size() == 1) {
std::vector<std::string> str_slice{params[0]};
return m_model->HasPolicy("g", p_type, str_slice);
}
std::vector<std::string> policy;
for (int i = 0; i < params.size(); i++)
policy.push_back(params[i]);
return m_model->HasPolicy("g", p_type, policy);
}
// AddGroupingPolicy adds a role inheritance rule to the current policy.
// If the rule already exists, the function returns false and the rule will not be added.
// Otherwise the function returns true by adding the new rule.
bool Enforcer ::AddGroupingPolicy(const std::vector<std::string>& params) {
return this->AddNamedGroupingPolicy("g", params);
}
// AddGroupingPolicies adds role inheritance rulea to the current policy.
// If the rule already exists, the function returns false for the corresponding policy rule and the rule will not be added.
// Otherwise the function returns true for the corresponding policy rule by adding the new rule.
bool Enforcer ::AddGroupingPolicies(const PoliciesValues& rules) {
return this->AddNamedGroupingPolicies("g", rules);
}
// AddNamedGroupingPolicy adds a named role inheritance rule to the current policy.
// If the rule already exists, the function returns false and the rule will not be added.
// Otherwise the function returns true by adding the new rule.
bool Enforcer ::AddNamedGroupingPolicy(const std::string& p_type, const std::vector<std::string>& params) {
bool rule_added;
if (params.size() == 1) {
std::vector<std::string> str_slice{params[0]};
rule_added = this->addPolicy("g", p_type, str_slice);
} else {
std::vector<std::string> policy;
for (int i = 0; i < params.size(); i++)
policy.push_back(params[i]);
rule_added = this->addPolicy("g", p_type, policy);
}
if (m_auto_build_role_links)
this->BuildIncrementalRoleLinks(policy_add, p_type, PoliciesValues({params}));
// this->BuildRoleLinks();
return rule_added;
}
// AddNamedGroupingPolicies adds named role inheritance rules to the current policy.
// If the rule already exists, the function returns false for the corresponding policy rule and the rule will not be added.
// Otherwise the function returns true for the corresponding policy rule by adding the new rule.
bool Enforcer ::AddNamedGroupingPolicies(const std::string& p_type, const PoliciesValues& rules) {
return this->addPolicies("g", p_type, rules);
}
// RemoveGroupingPolicy removes a role inheritance rule from the current policy.
bool Enforcer ::RemoveGroupingPolicy(const std::vector<std::string>& params) {
return this->RemoveNamedGroupingPolicy("g", params);
}
// RemoveGroupingPolicies removes role inheritance rulea from the current policy.
bool Enforcer ::RemoveGroupingPolicies(const PoliciesValues& rules) {
return this->RemoveNamedGroupingPolicies("g", rules);
}
// RemoveFilteredGroupingPolicy removes a role inheritance rule from the current policy, field filters can be specified.
bool Enforcer ::RemoveFilteredGroupingPolicy(int field_index, const std::vector<std::string>& field_values) {
return this->RemoveFilteredNamedGroupingPolicy("g", field_index, field_values);
}
// RemoveNamedGroupingPolicy removes a role inheritance rule from the current named policy.
bool Enforcer ::RemoveNamedGroupingPolicy(const std::string& p_type, const std::vector<std::string>& params) {
bool rule_removed;
if (params.size() == 1) {
std::vector<std::string> str_slice{params[0]};
rule_removed = this->removePolicy("g", p_type, str_slice);
} else {
std::vector<std::string> policy;
for (int i = 0; i < params.size(); i++)
policy.push_back(params[i]);
rule_removed = this->removePolicy("g", p_type, policy);
}
if (m_auto_build_role_links)
this->BuildRoleLinks();
return rule_removed;
}
// RemoveNamedGroupingPolicies removes role inheritance rules from the current named policy.
bool Enforcer ::RemoveNamedGroupingPolicies(const std::string& p_type, const PoliciesValues& rules) {
return this->removePolicies("g", p_type, rules);
}
// RemoveFilteredNamedGroupingPolicy removes a role inheritance rule from the current named policy, field filters can be specified.
bool Enforcer ::RemoveFilteredNamedGroupingPolicy(const std::string& p_type, int field_index, const std::vector<std::string>& field_values) {
bool rule_removed = this->removeFilteredPolicy("g", p_type, field_index, field_values);
if (m_auto_build_role_links)
this->BuildRoleLinks();
return rule_removed;
}
bool Enforcer ::UpdateGroupingPolicy(const std::vector<std::string>& oldRule, const std::vector<std::string>& newRule) {
return UpdateNamedGroupingPolicy("g", oldRule, newRule);
}
bool Enforcer ::UpdateNamedGroupingPolicy(const std::string& p_type, const std::vector<std::string>& oldRule, const std::vector<std::string>& newRule) {
return this->updatePolicy("g", p_type, oldRule, newRule);
}
// UpdatePolicy updates an authorization rule from the current policy.
bool Enforcer ::UpdatePolicy(const std::vector<std::string>& oldPolicy, const std::vector<std::string>& newPolicy) {
return UpdateNamedPolicy("p", oldPolicy, newPolicy);
}
bool Enforcer ::UpdateNamedPolicy(const std::string& ptype, const std::vector<std::string>& p1, const std::vector<std::string>& p2) {
return this->updatePolicy("p", ptype, p1, p2);
}
// UpdatePolicies updates authorization rules from the current policies.
bool Enforcer ::UpdatePolicies(const PoliciesValues& oldPolices, const PoliciesValues& newPolicies) {
return UpdateNamedPolicies("p", oldPolices, newPolicies);
}
bool Enforcer ::UpdateNamedPolicies(const std::string& ptype, const PoliciesValues& p1, const PoliciesValues& p2) {
return this->updatePolicies("p", ptype, p1, p2);
}
// AddNamedMatchingFunc add MatchingFunc by ptype RoleManager
bool Enforcer ::AddNamedMatchingFunc(const std::string& ptype, const std::string& name, casbin::MatchingFunc func) {
auto default_rm = dynamic_cast<casbin::DefaultRoleManager*>(this->rm.get());
default_rm->AddMatchingFunc(func);
return true;
}
} // namespace casbin
#endif // MANAGEMENT_API_CPP