| 1 | |
package com.ctrip.framework.apollo.portal.controller; |
| 2 | |
|
| 3 | |
import com.google.common.collect.Sets; |
| 4 | |
|
| 5 | |
import com.ctrip.framework.apollo.core.exception.BadRequestException; |
| 6 | |
import com.ctrip.framework.apollo.portal.auth.UserInfoHolder; |
| 7 | |
import com.ctrip.framework.apollo.portal.constant.RoleType; |
| 8 | |
import com.ctrip.framework.apollo.portal.entity.po.UserInfo; |
| 9 | |
import com.ctrip.framework.apollo.portal.entity.vo.AppRolesAssignedUsers; |
| 10 | |
import com.ctrip.framework.apollo.portal.entity.vo.NamespaceRolesAssignedUsers; |
| 11 | |
import com.ctrip.framework.apollo.portal.entity.vo.PermissionCondition; |
| 12 | |
import com.ctrip.framework.apollo.portal.service.RolePermissionService; |
| 13 | |
import com.ctrip.framework.apollo.portal.util.RoleUtils; |
| 14 | |
|
| 15 | |
import org.springframework.beans.factory.annotation.Autowired; |
| 16 | |
import org.springframework.http.ResponseEntity; |
| 17 | |
import org.springframework.security.access.prepost.PreAuthorize; |
| 18 | |
import org.springframework.web.bind.annotation.PathVariable; |
| 19 | |
import org.springframework.web.bind.annotation.RequestBody; |
| 20 | |
import org.springframework.web.bind.annotation.RequestMapping; |
| 21 | |
import org.springframework.web.bind.annotation.RequestMethod; |
| 22 | |
import org.springframework.web.bind.annotation.RequestParam; |
| 23 | |
import org.springframework.web.bind.annotation.RestController; |
| 24 | |
|
| 25 | |
import java.util.Set; |
| 26 | |
|
| 27 | |
import static com.ctrip.framework.apollo.portal.util.RequestPrecondition.checkArgument; |
| 28 | |
|
| 29 | |
|
| 30 | |
@RestController |
| 31 | 1 | public class PermissionController { |
| 32 | |
|
| 33 | |
@Autowired |
| 34 | |
private UserInfoHolder userInfoHolder; |
| 35 | |
@Autowired |
| 36 | |
private RolePermissionService rolePermissionService; |
| 37 | |
|
| 38 | |
@RequestMapping("/apps/{appId}/permissions/{permissionType}") |
| 39 | |
public ResponseEntity<PermissionCondition> hasPermission(@PathVariable String appId, @PathVariable String permissionType) { |
| 40 | 0 | PermissionCondition permissionCondition = new PermissionCondition(); |
| 41 | |
|
| 42 | 0 | permissionCondition.setHasPermission( |
| 43 | 0 | rolePermissionService.userHasPermission(userInfoHolder.getUser().getUserId(), permissionType, appId)); |
| 44 | |
|
| 45 | 0 | return ResponseEntity.ok().body(permissionCondition); |
| 46 | |
} |
| 47 | |
|
| 48 | |
@RequestMapping("/apps/{appId}/namespaces/{namespaceName}/permissions/{permissionType}") |
| 49 | |
public ResponseEntity<PermissionCondition> hasPermission(@PathVariable String appId, @PathVariable String namespaceName, |
| 50 | |
@PathVariable String permissionType) { |
| 51 | 0 | PermissionCondition permissionCondition = new PermissionCondition(); |
| 52 | |
|
| 53 | 0 | permissionCondition.setHasPermission( |
| 54 | 0 | rolePermissionService.userHasPermission(userInfoHolder.getUser().getUserId(), permissionType, |
| 55 | 0 | RoleUtils.buildNamespaceTargetId(appId, namespaceName))); |
| 56 | |
|
| 57 | 0 | return ResponseEntity.ok().body(permissionCondition); |
| 58 | |
} |
| 59 | |
|
| 60 | |
|
| 61 | |
@RequestMapping("/apps/{appId}/namespaces/{namespaceName}/role_users") |
| 62 | |
public NamespaceRolesAssignedUsers getNamespaceRoles(@PathVariable String appId, @PathVariable String namespaceName){ |
| 63 | |
|
| 64 | 0 | NamespaceRolesAssignedUsers assignedUsers = new NamespaceRolesAssignedUsers(); |
| 65 | 0 | assignedUsers.setNamespaceName(namespaceName); |
| 66 | 0 | assignedUsers.setAppId(appId); |
| 67 | |
|
| 68 | 0 | Set<UserInfo> releaseNamespaceUsers = |
| 69 | 0 | rolePermissionService.queryUsersWithRole(RoleUtils.buildReleaseNamespaceRoleName(appId, namespaceName)); |
| 70 | 0 | assignedUsers.setReleaseRoleUsers(releaseNamespaceUsers); |
| 71 | |
|
| 72 | 0 | Set<UserInfo> modifyNamespaceUsers = |
| 73 | 0 | rolePermissionService.queryUsersWithRole(RoleUtils.buildModifyNamespaceRoleName(appId, namespaceName)); |
| 74 | 0 | assignedUsers.setModifyRoleUsers(modifyNamespaceUsers); |
| 75 | |
|
| 76 | 0 | return assignedUsers; |
| 77 | |
} |
| 78 | |
|
| 79 | |
@PreAuthorize(value = "@permissionValidator.hasAssignRolePermission(#appId)") |
| 80 | |
@RequestMapping(value = "/apps/{appId}/namespaces/{namespaceName}/roles/{roleType}", method = RequestMethod.POST) |
| 81 | |
public ResponseEntity<Void> assignNamespaceRoleToUser(@PathVariable String appId, @PathVariable String namespaceName, |
| 82 | |
@PathVariable String roleType, @RequestBody String user){ |
| 83 | |
|
| 84 | 0 | checkArgument(user); |
| 85 | |
|
| 86 | 0 | if (!RoleType.isValidRoleType(roleType)){ |
| 87 | 0 | throw new BadRequestException("role type is illegal"); |
| 88 | |
} |
| 89 | 0 | rolePermissionService.assignRoleToUsers(RoleUtils.buildNamespaceRoleName(appId, namespaceName, roleType), |
| 90 | 0 | Sets.newHashSet(user), userInfoHolder.getUser().getUserId()); |
| 91 | |
|
| 92 | 0 | return ResponseEntity.ok().build(); |
| 93 | |
} |
| 94 | |
|
| 95 | |
@PreAuthorize(value = "@permissionValidator.hasAssignRolePermission(#appId)") |
| 96 | |
@RequestMapping(value = "/apps/{appId}/namespaces/{namespaceName}/roles/{roleType}", method = RequestMethod.DELETE) |
| 97 | |
public ResponseEntity<Void> removeNamespaceRoleFromUser(@PathVariable String appId, @PathVariable String namespaceName, |
| 98 | |
@PathVariable String roleType, @RequestParam String user){ |
| 99 | 0 | checkArgument(user); |
| 100 | |
|
| 101 | 0 | if (!RoleType.isValidRoleType(roleType)){ |
| 102 | 0 | throw new BadRequestException("role type is illegal"); |
| 103 | |
} |
| 104 | 0 | rolePermissionService.removeRoleFromUsers(RoleUtils.buildNamespaceRoleName(appId, namespaceName, roleType), |
| 105 | 0 | Sets.newHashSet(user), userInfoHolder.getUser().getUserId()); |
| 106 | 0 | return ResponseEntity.ok().build(); |
| 107 | |
} |
| 108 | |
|
| 109 | |
@RequestMapping(value = "/apps/{appId}/role_users") |
| 110 | |
public AppRolesAssignedUsers getAppRoles(@PathVariable String appId){ |
| 111 | 0 | AppRolesAssignedUsers users = new AppRolesAssignedUsers(); |
| 112 | 0 | users.setAppId(appId); |
| 113 | |
|
| 114 | 0 | Set<UserInfo> masterUsers = rolePermissionService.queryUsersWithRole(RoleUtils.buildAppMasterRoleName(appId)); |
| 115 | 0 | users.setMasterUsers(masterUsers); |
| 116 | |
|
| 117 | 0 | return users; |
| 118 | |
} |
| 119 | |
|
| 120 | |
@PreAuthorize(value = "@permissionValidator.hasAssignRolePermission(#appId)") |
| 121 | |
@RequestMapping(value = "/apps/{appId}/roles/{roleType}", method = RequestMethod.POST) |
| 122 | |
public ResponseEntity<Void> assignAppRoleToUser(@PathVariable String appId, @PathVariable String roleType, |
| 123 | |
@RequestBody String user){ |
| 124 | |
|
| 125 | 0 | checkArgument(user); |
| 126 | |
|
| 127 | 0 | if (!RoleType.isValidRoleType(roleType)){ |
| 128 | 0 | throw new BadRequestException("role type is illegal"); |
| 129 | |
} |
| 130 | 0 | rolePermissionService.assignRoleToUsers(RoleUtils.buildAppRoleName(appId, roleType), |
| 131 | 0 | Sets.newHashSet(user), userInfoHolder.getUser().getUserId()); |
| 132 | |
|
| 133 | 0 | return ResponseEntity.ok().build(); |
| 134 | |
} |
| 135 | |
|
| 136 | |
@PreAuthorize(value = "@permissionValidator.hasAssignRolePermission(#appId)") |
| 137 | |
@RequestMapping(value = "/apps/{appId}/roles/{roleType}", method = RequestMethod.DELETE) |
| 138 | |
public ResponseEntity<Void> removeAppRoleFromUser(@PathVariable String appId, @PathVariable String roleType, |
| 139 | |
@RequestParam String user){ |
| 140 | 0 | checkArgument(user); |
| 141 | |
|
| 142 | 0 | if (!RoleType.isValidRoleType(roleType)){ |
| 143 | 0 | throw new BadRequestException("role type is illegal"); |
| 144 | |
} |
| 145 | 0 | rolePermissionService.removeRoleFromUsers(RoleUtils.buildAppRoleName(appId, roleType), |
| 146 | 0 | Sets.newHashSet(user), userInfoHolder.getUser().getUserId()); |
| 147 | 0 | return ResponseEntity.ok().build(); |
| 148 | |
} |
| 149 | |
|
| 150 | |
|
| 151 | |
} |