blob: 5515942509ad039bb030b8bd7db2d58e34fb4abf [file] [log] [blame]
/*
* Copyright 2021 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.
*
* This is a test file showcasing the workflow of casbin::Enforcer
*/
#include <gtest/gtest.h>
#include <casbin/casbin.h>
#include "config_path.h"
namespace {
TEST(TestEnforcer, TestFourParams) {
casbin::Enforcer e(rbac_with_domains_model_path, rbac_with_domains_policy_path);
ASSERT_EQ(e.Enforce({ "alice", "domain1", "data1", "read" }), true);
ASSERT_EQ(e.Enforce({ "alice", "domain1", "data1", "write" }), true);
ASSERT_EQ(e.Enforce({ "alice", "domain1", "data2", "read" }), false);
ASSERT_EQ(e.Enforce({ "alice", "domain1", "data2", "write" }), false);
ASSERT_EQ(e.Enforce({ "bob", "domain2", "data1", "read" }), false);
ASSERT_EQ(e.Enforce({ "bob", "domain2", "data1", "write" }), false);
ASSERT_EQ(e.Enforce({ "bob", "domain2", "data2", "read" }), true);
ASSERT_EQ(e.Enforce({ "bob", "domain2", "data2", "write" }), true);
}
TEST(TestEnforcer, TestThreeParams) {
casbin::Enforcer e(basic_model_without_spaces_path, basic_policy_path);
ASSERT_EQ(e.Enforce({ "alice", "data1", "read" }), true);
ASSERT_EQ(e.Enforce({ "alice", "data1", "write" }), false);
ASSERT_EQ(e.Enforce({ "alice", "data2", "read" }), false);
ASSERT_EQ(e.Enforce({ "alice", "data2", "write" }), false);
ASSERT_EQ(e.Enforce({ "bob", "data1", "read" }), false);
ASSERT_EQ(e.Enforce({ "bob", "data1", "write" }), false);
ASSERT_EQ(e.Enforce({ "bob", "data2", "read" }), false);
ASSERT_EQ(e.Enforce({ "bob", "data2", "write" }), true);
}
TEST(TestEnforcer, TestVectorParams) {
casbin::Enforcer e(basic_model_without_spaces_path, basic_policy_path);
ASSERT_EQ(e.Enforce({ "alice", "data1", "read" }), true);
ASSERT_EQ(e.Enforce({ "alice", "data1", "write" }), false);
ASSERT_EQ(e.Enforce({ "alice", "data2", "read" }), false);
ASSERT_EQ(e.Enforce({ "alice", "data2", "write" }), false);
ASSERT_EQ(e.Enforce({ "bob", "data1", "read" }), false);
ASSERT_EQ(e.Enforce({ "bob", "data1", "write" }), false);
ASSERT_EQ(e.Enforce({ "bob", "data2", "read" }), false);
ASSERT_EQ(e.Enforce({ "bob", "data2", "write" }), true);
}
TEST(TestEnforcer, TestMapParams) {
casbin::Enforcer e(basic_model_without_spaces_path, basic_policy_path);
casbin::DataMap params = {{"sub", "alice"}, {"obj", "data1"}, {"act", "read"}};
ASSERT_EQ(e.Enforce(params), true);
params = { {"sub","alice"},{"obj","data1"},{"act","write"} };
ASSERT_EQ(e.Enforce(params), false);
params = { {"sub","alice"},{"obj","data2"},{"act","read"} };
ASSERT_EQ(e.Enforce(params), false);
params = { {"sub","alice"},{"obj","data2"},{"act","write"} };
ASSERT_EQ(e.Enforce(params), false);
params = { {"sub","bob"},{"obj","data1"},{"act","read"} };
ASSERT_EQ(e.Enforce(params), false);
params = { {"sub","bob"},{"obj","data1"},{"act","write"} };
ASSERT_EQ(e.Enforce(params), false);
params = { {"sub","bob"},{"obj","data2"},{"act","read"} };
ASSERT_EQ(e.Enforce(params), false);
params = { {"sub","bob"},{"obj","data2"},{"act","write"} };
ASSERT_EQ(e.Enforce(params), true);
}
TEST(TestEnforcer, ABACData) {
casbin::AttributeMap params = {
{ "Name", "Yash" },
{ "Grade", 8.6f },
{ "Age", 18 },
};
auto data = casbin::GetDataObject(params);
ASSERT_TRUE(params == data->GetAttributes());
data->DeleteAttribute("Name");
params = {
{ "Grade", 8.6f },
{ "Age", 18 },
};
ASSERT_TRUE(params == data->GetAttributes());
data->AddAttribute("ID", 156);
params["ID"] = 156;
ASSERT_TRUE(params == data->GetAttributes());
data->UpdateAttribute("ID", 152);
params["ID"] = 152;
ASSERT_TRUE(params == data->GetAttributes());
}
} // namespace