|
|
|
@ -14,8 +14,10 @@
|
|
|
|
|
* See the License for the specific language governing permissions and |
|
|
|
|
* limitations under the License. |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
package org.apache.dolphinscheduler.api.permission; |
|
|
|
|
|
|
|
|
|
import org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant; |
|
|
|
|
import org.apache.dolphinscheduler.common.enums.AuthorizationType; |
|
|
|
|
import org.apache.dolphinscheduler.common.enums.UserType; |
|
|
|
|
import org.apache.dolphinscheduler.dao.entity.Project; |
|
|
|
@ -23,21 +25,19 @@ import org.apache.dolphinscheduler.dao.entity.User;
|
|
|
|
|
import org.apache.dolphinscheduler.dao.mapper.ProjectMapper; |
|
|
|
|
import org.apache.dolphinscheduler.service.process.ProcessService; |
|
|
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.Arrays; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Map; |
|
|
|
|
import java.util.Set; |
|
|
|
|
import java.util.concurrent.ConcurrentHashMap; |
|
|
|
|
|
|
|
|
|
import org.junit.jupiter.api.Assertions; |
|
|
|
|
import org.junit.jupiter.api.BeforeEach; |
|
|
|
|
import org.junit.jupiter.api.Test; |
|
|
|
|
import org.junit.jupiter.api.extension.ExtendWith; |
|
|
|
|
import org.mockito.InjectMocks; |
|
|
|
|
import org.mockito.Mock; |
|
|
|
|
import org.mockito.Mockito; |
|
|
|
|
import org.mockito.junit.jupiter.MockitoExtension; |
|
|
|
|
import org.slf4j.Logger; |
|
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
|
import org.springframework.context.ApplicationContext; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* permission service test |
|
|
|
@ -53,73 +53,95 @@ public class ResourcePermissionCheckServiceTest {
|
|
|
|
|
@Mock |
|
|
|
|
private ProjectMapper projectMapper; |
|
|
|
|
|
|
|
|
|
@Mock |
|
|
|
|
private ApplicationContext context; |
|
|
|
|
@Mock |
|
|
|
|
private ResourcePermissionCheckService<Object> resourcePermissionCheckService; |
|
|
|
|
|
|
|
|
|
@InjectMocks |
|
|
|
|
ResourcePermissionCheckServiceImpl resourcePermissionCheckServices; |
|
|
|
|
ResourcePermissionCheckServiceImpl resourcePermissionCheckService; |
|
|
|
|
|
|
|
|
|
protected static final Map<AuthorizationType, ResourcePermissionCheckServiceImpl.ResourceAcquisitionAndPermissionCheck<?>> RESOURCE_LIST_MAP = |
|
|
|
|
new ConcurrentHashMap<>(); |
|
|
|
|
@BeforeEach |
|
|
|
|
public void setup() { |
|
|
|
|
ResourcePermissionCheckServiceImpl.RESOURCE_LIST_MAP.put(AuthorizationType.PROJECTS, |
|
|
|
|
new ResourcePermissionCheckServiceImpl.ProjectsResourcePermissionCheck(projectMapper)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testResourcePermissionCheck() { |
|
|
|
|
User user = new User(); |
|
|
|
|
user.setId(1); |
|
|
|
|
Object[] obj = new Object[]{1, 2}; |
|
|
|
|
boolean result = this.resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.PROJECTS, obj, |
|
|
|
|
user.getId(), logger); |
|
|
|
|
Assertions.assertFalse(result); |
|
|
|
|
User user = getGeneralUser(); |
|
|
|
|
|
|
|
|
|
Assertions.assertTrue(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.PROJECTS, null, |
|
|
|
|
user.getId(), logger)); |
|
|
|
|
|
|
|
|
|
List<Project> projects = Arrays.asList(getProject(1), getProject(2), getProject(3)); |
|
|
|
|
Mockito.when(projectMapper.listAuthorizedProjects(user.getId(), null)).thenReturn(projects); |
|
|
|
|
|
|
|
|
|
Assertions.assertTrue(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.PROJECTS, |
|
|
|
|
new Object[]{}, user.getId(), logger)); |
|
|
|
|
Assertions.assertTrue(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.PROJECTS, |
|
|
|
|
new Object[]{1, 2}, user.getId(), logger)); |
|
|
|
|
Assertions.assertFalse(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.PROJECTS, |
|
|
|
|
new Object[]{1, 2, 3, 4}, user.getId(), logger)); |
|
|
|
|
Assertions.assertFalse(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.PROJECTS, |
|
|
|
|
new Object[]{2, 3, 4}, user.getId(), logger)); |
|
|
|
|
Assertions.assertFalse(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.PROJECTS, |
|
|
|
|
new Object[]{4, 5}, user.getId(), logger)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testOperationPermissionCheck() { |
|
|
|
|
User user = new User(); |
|
|
|
|
user.setId(1); |
|
|
|
|
resourcePermissionCheckServices.setApplicationContext(context); |
|
|
|
|
Assertions.assertFalse(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.PROJECTS, |
|
|
|
|
user.getId(), null, logger)); |
|
|
|
|
String sourceUrl = "/tmp/"; |
|
|
|
|
User user = getGeneralUser(); |
|
|
|
|
|
|
|
|
|
Mockito.when(processService.getUserById(user.getId())).thenReturn(null); |
|
|
|
|
Assertions.assertFalse(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.PROJECTS, |
|
|
|
|
user.getId(), sourceUrl, logger)); |
|
|
|
|
user.getId(), ApiFuncIdentificationConstant.PROJECT, logger)); |
|
|
|
|
|
|
|
|
|
Mockito.when(processService.getUserById(user.getId())).thenReturn(user); |
|
|
|
|
Assertions.assertTrue(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.PROJECTS, |
|
|
|
|
user.getId(), ApiFuncIdentificationConstant.PROJECT, logger)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testUserOwnedResourceIdsAcquisition() { |
|
|
|
|
User generalUser = getGeneralUser(); |
|
|
|
|
Mockito.when(processService.getUserById(generalUser.getId())).thenReturn(null); |
|
|
|
|
Assertions.assertEquals(0, resourcePermissionCheckService |
|
|
|
|
.userOwnedResourceIdsAcquisition(AuthorizationType.PROJECTS, generalUser.getId(), logger).size()); |
|
|
|
|
|
|
|
|
|
// GENERAL_USER
|
|
|
|
|
List<Project> projects = Arrays.asList(getProject(1), getProject(2), getProject(3)); |
|
|
|
|
Mockito.when(processService.getUserById(generalUser.getId())).thenReturn(generalUser); |
|
|
|
|
Mockito.when(projectMapper.listAuthorizedProjects(generalUser.getId(), null)).thenReturn(projects); |
|
|
|
|
Assertions.assertEquals(3, resourcePermissionCheckService |
|
|
|
|
.userOwnedResourceIdsAcquisition(AuthorizationType.PROJECTS, generalUser.getId(), logger).size()); |
|
|
|
|
|
|
|
|
|
// ADMIN_USER
|
|
|
|
|
User adminUser = getAdminUser(); |
|
|
|
|
Mockito.when(processService.getUserById(adminUser.getId())).thenReturn(adminUser); |
|
|
|
|
Mockito.when(projectMapper.listAuthorizedProjects(0, null)).thenReturn(projects); |
|
|
|
|
Assertions.assertEquals(3, resourcePermissionCheckService |
|
|
|
|
.userOwnedResourceIdsAcquisition(AuthorizationType.PROJECTS, adminUser.getId(), logger).size()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private User getGeneralUser() { |
|
|
|
|
User user = new User(); |
|
|
|
|
user.setId(2); |
|
|
|
|
user.setUserType(UserType.GENERAL_USER); |
|
|
|
|
user.setUserName("userTest0001"); |
|
|
|
|
user.setUserPassword("userTest0001"); |
|
|
|
|
return user; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private User getAdminUser() { |
|
|
|
|
User user = new User(); |
|
|
|
|
user.setId(1); |
|
|
|
|
// ADMIN
|
|
|
|
|
user.setUserType(UserType.ADMIN_USER); |
|
|
|
|
Set result = resourcePermissionCheckServices.userOwnedResourceIdsAcquisition(AuthorizationType.PROJECTS, |
|
|
|
|
user.getId(), |
|
|
|
|
logger); |
|
|
|
|
Assertions.assertNotNull(result); |
|
|
|
|
user.setUserName("userTest0001"); |
|
|
|
|
user.setUserPassword("userTest0001"); |
|
|
|
|
return user; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testSetApplication() { |
|
|
|
|
resourcePermissionCheckServices.setApplicationContext(context); |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* create entity |
|
|
|
|
*/ |
|
|
|
|
private Project getEntity() { |
|
|
|
|
private Project getProject(int projectId) { |
|
|
|
|
Project project = new Project(); |
|
|
|
|
project.setId(1); |
|
|
|
|
project.setUserId(1); |
|
|
|
|
project.setName("permissionsTest"); |
|
|
|
|
project.setUserName("permissionTest"); |
|
|
|
|
project.setCode(1L); |
|
|
|
|
project.setId(projectId); |
|
|
|
|
project.setName("projectName"); |
|
|
|
|
return project; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* entity list |
|
|
|
|
*/ |
|
|
|
|
private List<Project> getList() { |
|
|
|
|
List<Project> list = new ArrayList<>(); |
|
|
|
|
list.add(getEntity()); |
|
|
|
|
return list; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|