blob: cf0b2eb8e8ee1d3187c9f31b45ecffa48b963797 [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.
*/
#ifndef CASBIN_CPP_ENFORCER_INTERFACE
#define CASBIN_CPP_ENFORCER_INTERFACE
#include "casbin/data_types.h"
#include "casbin/effect/effector.h"
#include "casbin/model/evaluator.h"
#include "casbin/model/model.h"
#include "casbin/persist/adapter.h"
#include "casbin/persist/default_watcher.h"
#include "casbin/rbac/default_role_manager.h"
namespace casbin {
// IEnforcer is the API interface of Enforcer
class IEnforcer {
public:
/* Enforcer API */
virtual void InitWithFile(const std::string& model_path, const std::string& policy_path) = 0;
virtual void InitWithAdapter(const std::string& model_path, std::shared_ptr<Adapter> adapter) = 0;
virtual void InitWithModelAndAdapter(const std::shared_ptr<Model>& m, std::shared_ptr<Adapter> adapter) = 0;
virtual void Initialize() = 0;
virtual void LoadModel() = 0;
virtual std::shared_ptr<Model> GetModel() = 0;
virtual void SetModel(const std::shared_ptr<Model>& m) = 0;
virtual std::shared_ptr<Adapter> GetAdapter() = 0;
virtual void SetAdapter(std::shared_ptr<Adapter> adapter) = 0;
virtual void SetWatcher(std::shared_ptr<Watcher> watcher) = 0;
virtual std::shared_ptr<RoleManager> GetRoleManager() = 0;
virtual void SetRoleManager(std::shared_ptr<RoleManager>& rm) = 0;
virtual void SetEffector(std::shared_ptr<Effector> eft) = 0;
virtual void ClearPolicy() = 0;
virtual void LoadPolicy() = 0;
template <typename Filter>
void LoadFilteredPolicy(Filter filter);
virtual bool IsFiltered() = 0;
virtual void SavePolicy() = 0;
virtual void EnableEnforce(bool enable) = 0;
// virtual void EnableLog(bool enable) = 0;
virtual void EnableAutoNotifyWatcher(bool enable) = 0;
virtual void EnableAutoSave(bool auto_save) = 0;
virtual void EnableAutoBuildRoleLinks(bool auto_build_role_links) = 0;
virtual void BuildRoleLinks() = 0;
virtual bool m_enforce(const std::string& matcher, std::vector<std::string>& explains, std::shared_ptr<IEvaluator> evalator) = 0;
virtual bool Enforce(std::shared_ptr<IEvaluator> evalator) = 0;
virtual bool EnforceWithMatcher(const std::string& matcher, std::shared_ptr<IEvaluator> evalator) = 0;
virtual bool EnforceEx(std::shared_ptr<IEvaluator> evalator, std::vector<std::string>& explain) = 0;
virtual bool EnforceExWithMatcher(const std::string& matcher, std::shared_ptr<IEvaluator> evalator, std::vector<std::string>& explain) = 0;
virtual std::vector<bool> BatchEnforce(const std::initializer_list<DataList>& requests) = 0;
virtual std::vector<bool> BatchEnforceWithMatcher(const std::string& matcher, const std::initializer_list<DataList>& requests) = 0;
/* RBAC API */
virtual std::vector<std::string> GetRolesForUser(const std::string& name, const std::vector<std::string>& domain = {}) = 0;
virtual std::vector<std::string> GetUsersForRole(const std::string& name, const std::vector<std::string>& domain = {}) = 0;
virtual bool HasRoleForUser(const std::string& name, const std::string& role) = 0;
virtual bool AddRoleForUser(const std::string& user, const std::string& role) = 0;
virtual bool AddRolesForUser(const std::string& user, const std::vector<std::string>& roles) = 0;
virtual bool AddPermissionForUser(const std::string& user, const std::vector<std::string>& permission) = 0;
virtual bool DeletePermissionForUser(const std::string& user, const std::vector<std::string>& permission) = 0;
virtual bool DeletePermissionsForUser(const std::string& user) = 0;
virtual PoliciesValues GetPermissionsForUser(const std::string& user) = 0;
virtual bool HasPermissionForUser(const std::string& user, const std::vector<std::string>& permission) = 0;
virtual std::vector<std::string> GetImplicitRolesForUser(const std::string& name, const std::vector<std::string>& domain = {}) = 0;
virtual PoliciesValues GetImplicitPermissionsForUser(const std::string& user, const std::vector<std::string>& domain = {}) = 0;
virtual std::vector<std::string> GetImplicitUsersForPermission(const std::vector<std::string>& permission) = 0;
virtual bool DeleteRoleForUser(const std::string& user, const std::string& role) = 0;
virtual bool DeleteRolesForUser(const std::string& user) = 0;
virtual bool DeleteUser(const std::string& user) = 0;
virtual bool DeleteRole(const std::string& role) = 0;
virtual bool DeletePermission(const std::vector<std::string>& permission) = 0;
/* Management API */
virtual std::vector<std::string> GetAllSubjects() = 0;
virtual std::vector<std::string> GetAllNamedSubjects(const std::string& p_type) = 0;
virtual std::vector<std::string> GetAllObjects() = 0;
virtual std::vector<std::string> GetAllNamedObjects(const std::string& p_type) = 0;
virtual std::vector<std::string> GetAllActions() = 0;
virtual std::vector<std::string> GetAllNamedActions(const std::string& p_type) = 0;
virtual std::vector<std::string> GetAllRoles() = 0;
virtual std::vector<std::string> GetAllNamedRoles(const std::string& p_type) = 0;
virtual PoliciesValues GetPolicy() = 0;
virtual PoliciesValues GetFilteredPolicy(int field_index, const std::vector<std::string>& field_values) = 0;
virtual PoliciesValues GetNamedPolicy(const std::string& p_type) = 0;
virtual PoliciesValues GetFilteredNamedPolicy(const std::string& p_type, int field_index, const std::vector<std::string>& field_values) = 0;
virtual PoliciesValues GetGroupingPolicy() = 0;
virtual PoliciesValues GetFilteredGroupingPolicy(int field_index, const std::vector<std::string>& field_values) = 0;
virtual PoliciesValues GetNamedGroupingPolicy(const std::string& p_type) = 0;
virtual PoliciesValues GetFilteredNamedGroupingPolicy(const std::string& p_type, int field_index, const std::vector<std::string>& field_values) = 0;
virtual bool HasPolicy(const std::vector<std::string>& params) = 0;
virtual bool HasNamedPolicy(const std::string& p_type, const std::vector<std::string>& params) = 0;
virtual bool AddPolicy(const std::vector<std::string>& params) = 0;
virtual bool AddPolicies(const PoliciesValues& rules) = 0;
virtual bool AddNamedPolicy(const std::string& p_type, const std::vector<std::string>& params) = 0;
virtual bool AddNamedPolicies(const std::string& p_type, const PoliciesValues& rules) = 0;
virtual bool RemovePolicy(const std::vector<std::string>& params) = 0;
virtual bool RemovePolicies(const PoliciesValues& rules) = 0;
virtual bool RemoveFilteredPolicy(int field_index, const std::vector<std::string>& field_values) = 0;
virtual bool RemoveNamedPolicy(const std::string& p_type, const std::vector<std::string>& params) = 0;
virtual bool RemoveNamedPolicies(const std::string& p_type, const PoliciesValues& rules) = 0;
virtual bool RemoveFilteredNamedPolicy(const std::string& p_type, int field_index, const std::vector<std::string>& field_values) = 0;
virtual bool HasGroupingPolicy(const std::vector<std::string>& params) = 0;
virtual bool HasNamedGroupingPolicy(const std::string& p_type, const std::vector<std::string>& params) = 0;
virtual bool AddGroupingPolicy(const std::vector<std::string>& params) = 0;
virtual bool AddGroupingPolicies(const PoliciesValues& rules) = 0;
virtual bool AddNamedGroupingPolicy(const std::string& p_type, const std::vector<std::string>& params) = 0;
virtual bool AddNamedGroupingPolicies(const std::string& p_type, const PoliciesValues& rules) = 0;
virtual bool RemoveGroupingPolicy(const std::vector<std::string>& params) = 0;
virtual bool RemoveGroupingPolicies(const PoliciesValues& rules) = 0;
virtual bool RemoveFilteredGroupingPolicy(int field_index, const std::vector<std::string>& field_values) = 0;
virtual bool RemoveNamedGroupingPolicy(const std::string& p_type, const std::vector<std::string>& params) = 0;
virtual bool RemoveNamedGroupingPolicies(const std::string& p_type, const PoliciesValues& rules) = 0;
virtual bool RemoveFilteredNamedGroupingPolicy(const std::string& p_type, int field_index, const std::vector<std::string>& field_values) = 0;
virtual bool UpdateGroupingPolicy(const std::vector<std::string>& oldRule, const std::vector<std::string>& newRule) = 0;
virtual bool UpdateNamedGroupingPolicy(const std::string& ptype, const std::vector<std::string>& oldRule, const std::vector<std::string>& newRule) = 0;
virtual bool UpdatePolicy(const std::vector<std::string>& oldPolicy, const std::vector<std::string>& newPolicy) = 0;
virtual bool UpdateNamedPolicy(const std::string& ptype, const std::vector<std::string>& p1, const std::vector<std::string>& p2) = 0;
virtual bool UpdatePolicies(const PoliciesValues& oldPolices, const PoliciesValues& newPolicies) = 0;
virtual bool UpdateNamedPolicies(const std::string& ptype, const PoliciesValues& p1, const PoliciesValues& p2) = 0;
virtual bool AddNamedMatchingFunc(const std::string& ptype, const std::string& name, casbin::MatchingFunc func) = 0;
/* Internal API member functions */
virtual bool addPolicy(const std::string& sec, const std::string& p_type, const std::vector<std::string>& rule) = 0;
virtual bool addPolicies(const std::string& sec, const std::string& p_type, const PoliciesValues& rules) = 0;
virtual bool removePolicy(const std::string& sec, const std::string& p_type, const std::vector<std::string>& rule) = 0;
virtual bool removePolicies(const std::string& sec, const std::string& p_type, const PoliciesValues& rules) = 0;
virtual bool removeFilteredPolicy(const std::string& sec, const std::string& p_type, int field_index, const std::vector<std::string>& field_values) = 0;
virtual bool updatePolicy(const std::string& sec, const std::string& p_type, const std::vector<std::string>& oldRule, const std::vector<std::string>& newRule) = 0;
virtual bool updatePolicies(const std::string& sec, const std::string& p_type, const PoliciesValues& p1, const PoliciesValues& p2) = 0;
/* RBAC API with domains.*/
virtual std::vector<std::string> GetUsersForRoleInDomain(const std::string& name, const std::string& domain) = 0;
virtual std::vector<std::string> GetRolesForUserInDomain(const std::string& name, const std::string& domain) = 0;
virtual PoliciesValues GetPermissionsForUserInDomain(const std::string& user, const std::string& domain) = 0;
virtual bool AddRoleForUserInDomain(const std::string& user, const std::string& role, const std::string& domain) = 0;
virtual bool DeleteRoleForUserInDomain(const std::string& user, const std::string& role, const std::string& domain) = 0;
};
} // namespace casbin
#endif