package org.rapidoid.security; /* * #%L * rapidoid-commons * %% * Copyright (C) 2014 - 2017 Nikolche Mihajlovski and contributors * %% * 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. * #L% */ import org.junit.Test; import org.rapidoid.annotation.Authors; import org.rapidoid.annotation.Since; import org.rapidoid.u.U; import java.util.List; import static org.rapidoid.security.Role.*; class Foo { public String createdBy; public List<User> sharedWith; } @Authors("Nikolche Mihajlovski") @Since("2.0.0") public class RoleBasedSecurityTest extends SecurityTestCommons { @Test public void testAdminRoleCheck() { isFalse(Secure.isAdministrator(null, roles(null))); isFalse(Secure.isAdministrator("", roles(""))); isFalse(Secure.isAdministrator("abc", roles("abc"))); isFalse(Secure.isAdministrator("mng1", roles("mng1"))); isFalse(Secure.isAdministrator("mod1", roles("mod1"))); isFalse(Secure.isAdministrator("mod2", roles("mod2"))); isTrue(Secure.isAdministrator("adm1", roles("adm1"))); isTrue(Secure.isAdministrator("adm2", roles("adm2"))); } @Test public void testManagerRoleCheck() { isFalse(Secure.isManager(null, roles(null))); isFalse(Secure.isManager("", roles(""))); isFalse(Secure.isManager("abc", roles("abc"))); isFalse(Secure.isManager("adm1", roles("adm1"))); isFalse(Secure.isManager("adm2", roles("adm2"))); isFalse(Secure.isManager("mod1", roles("mod1"))); isFalse(Secure.isManager("mod2", roles("mod2"))); isTrue(Secure.isManager("mng1", roles("mng1"))); } @Test public void testModeratorRoleCheck() { isFalse(Secure.isModerator(null, roles(null))); isFalse(Secure.isModerator("", roles(""))); isFalse(Secure.isModerator("abc", roles("abc"))); isFalse(Secure.isModerator("adm1", roles("adm1"))); isFalse(Secure.isModerator("adm2", roles("adm2"))); isTrue(Secure.isModerator("mod1", roles("mod1"))); isTrue(Secure.isModerator("mod2", roles("mod2"))); } @Test public void testLoggedInRoleCheck() { isFalse(Secure.hasRole(null, roles(null), LOGGED_IN)); isFalse(Secure.hasRole("", roles(""), LOGGED_IN)); isTrue(Secure.hasRole("abc", roles("abc"), LOGGED_IN)); isTrue(Secure.hasRole("adm1", roles("adm1"), LOGGED_IN)); isTrue(Secure.hasRole("mod1", roles("mod1"), LOGGED_IN)); } @Test public void testOwnerRoleCheck() { isFalse(Secure.hasRole(null, roles(null), OWNER)); isFalse(Secure.hasRole("", roles(""), OWNER)); isFalse(Secure.hasRole("abc", roles("abc"), OWNER)); isFalse(Secure.hasRole("adm1", roles("adm1"), OWNER)); isFalse(Secure.hasRole("mng1", roles("mng1"), OWNER)); isFalse(Secure.hasRole("mod1", roles("mod1"), OWNER)); isFalse(Secure.hasRoleForClass(null, roles(null), OWNER, Foo.class)); isFalse(Secure.hasRoleForClass("", roles(""), OWNER, Foo.class)); isFalse(Secure.hasRoleForClass("abc", roles("abc"), OWNER, Foo.class)); isFalse(Secure.hasRoleForClass("adm1", roles("adm1"), OWNER, Foo.class)); isFalse(Secure.hasRoleForClass("mng1", roles("mng1"), OWNER, Foo.class)); isFalse(Secure.hasRoleForClass("mod1", roles("mod1"), OWNER, Foo.class)); Foo foo = new Foo(); isFalse(Secure.hasRoleForRecord(null, roles(null), OWNER, foo)); isFalse(Secure.hasRoleForRecord("", roles(""), OWNER, foo)); isFalse(Secure.hasRoleForRecord("abc", roles("abc"), OWNER, foo)); isFalse(Secure.hasRoleForRecord("adm1", roles("adm1"), OWNER, foo)); isFalse(Secure.hasRoleForRecord("mng1", roles("mng1"), OWNER, foo)); isFalse(Secure.hasRoleForRecord("mod1", roles("mod1"), OWNER, foo)); foo.createdBy = "abc"; foo.sharedWith = U.list(); foo.sharedWith.add(new User("adm1")); foo.sharedWith.add(new User("mod1")); isFalse(Secure.hasRoleForRecord(null, roles(null), OWNER, foo)); isFalse(Secure.hasRoleForRecord("", roles(""), OWNER, foo)); isFalse(Secure.hasRoleForRecord("adm1", roles("adm1"), OWNER, foo)); isFalse(Secure.hasRoleForRecord("mng1", roles("mng1"), OWNER, foo)); isFalse(Secure.hasRoleForRecord("mod1", roles("mod1"), OWNER, foo)); isTrue(Secure.hasRoleForRecord("abc", roles("abc"), OWNER, foo)); } @Test public void testSharedWithRoleCheck() { isFalse(Secure.hasRole(null, roles(null), SHARED_WITH)); isFalse(Secure.hasRole("", roles(""), SHARED_WITH)); isFalse(Secure.hasRole("abc", roles("abc"), SHARED_WITH)); isFalse(Secure.hasRole("adm1", roles("adm1"), SHARED_WITH)); isFalse(Secure.hasRole("mng1", roles("mng1"), SHARED_WITH)); isFalse(Secure.hasRole("mod1", roles("mod1"), SHARED_WITH)); isFalse(Secure.hasRoleForClass(null, roles(null), SHARED_WITH, Foo.class)); isFalse(Secure.hasRoleForClass("", roles(""), SHARED_WITH, Foo.class)); isFalse(Secure.hasRoleForClass("abc", roles("abc"), SHARED_WITH, Foo.class)); isFalse(Secure.hasRoleForClass("adm1", roles("adm1"), SHARED_WITH, Foo.class)); isFalse(Secure.hasRoleForClass("mng1", roles("mng1"), SHARED_WITH, Foo.class)); isFalse(Secure.hasRoleForClass("mod1", roles("mod1"), SHARED_WITH, Foo.class)); Foo foo = new Foo(); isFalse(Secure.hasRoleForRecord(null, roles(null), SHARED_WITH, foo)); isFalse(Secure.hasRoleForRecord("", roles(""), SHARED_WITH, foo)); isFalse(Secure.hasRoleForRecord("abc", roles("abc"), SHARED_WITH, foo)); isFalse(Secure.hasRoleForRecord("adm1", roles("adm1"), SHARED_WITH, foo)); isFalse(Secure.hasRoleForRecord("mng1", roles("mng1"), SHARED_WITH, foo)); isFalse(Secure.hasRoleForRecord("mod1", roles("mod1"), SHARED_WITH, foo)); foo.createdBy = "abc"; foo.sharedWith = U.list(); foo.sharedWith.add(new User("adm1")); foo.sharedWith.add(new User("mod1")); isFalse(Secure.hasRoleForRecord(null, roles(null), SHARED_WITH, foo)); isFalse(Secure.hasRoleForRecord("", roles(""), SHARED_WITH, foo)); isFalse(Secure.hasRoleForRecord("abc", roles("abc"), SHARED_WITH, foo)); isFalse(Secure.hasRoleForRecord("mng1", roles("mng1"), SHARED_WITH, foo)); isTrue(Secure.hasRoleForRecord("adm1", roles("adm1"), SHARED_WITH, foo)); isTrue(Secure.hasRoleForRecord("mod1", roles("mod1"), SHARED_WITH, foo)); } }