2020import com .cloud .user .User ;
2121import com .cloud .user .dao .UserDao ;
2222import com .cloud .utils .component .ManagerBase ;
23+
24+ import java .util .Map ;
2325import java .util .stream .Collectors ;
2426import org .apache .cloudstack .acl .apikeypair .ApiKeyPairService ;
2527import org .apache .cloudstack .acl .apikeypair .ApiKeyPair ;
2628import org .apache .cloudstack .acl .apikeypair .ApiKeyPairPermission ;
2729import org .apache .cloudstack .acl .dao .ApiKeyPairDao ;
2830import org .apache .cloudstack .acl .dao .ApiKeyPairPermissionsDao ;
29- import org .apache .cloudstack .acl .dao .RolePermissionsDao ;
3031import org .apache .cloudstack .query .QueryService ;
3132import org .apache .commons .collections .CollectionUtils ;
3233
@@ -44,15 +45,34 @@ public class ApiKeyPairManagerImpl extends ManagerBase implements ApiKeyPairServ
4445 @ Inject
4546 private QueryService queryService ;
4647 @ Inject
47- private RolePermissionsDao rolePermissionsDao ;
48+ private RoleService roleService ;
4849
4950 @ Override
5051 public List <ApiKeyPairPermission > findAllPermissionsByKeyPairId (Long apiKeyPairId , Long roleId ) {
5152 List <ApiKeyPairPermissionVO > allPermissions = apiKeyPairPermissionsDao .findAllByKeyPairIdSorted (apiKeyPairId );
52- if (CollectionUtils .isNotEmpty (allPermissions )) {
53- return allPermissions .stream ().map (p -> (ApiKeyPairPermission ) p ).collect (Collectors .toList ());
53+ List <RolePermissionEntity > rolePermissionEntity = roleService .findAllRolePermissionsEntityBy (roleId );
54+
55+ if (!CollectionUtils .isEmpty (allPermissions )) {
56+ List <RolePermissionEntity > keyPairPermissionsEntity = allPermissions .stream ()
57+ .map (p -> (RolePermissionEntity ) p ).collect (Collectors .toList ());
58+
59+ Map <String , RolePermissionEntity .Permission > rolePermissionInfo = roleService .getRoleRulesAndPermissions (rolePermissionEntity );
60+
61+ if (roleService .roleHasPermission (rolePermissionInfo , keyPairPermissionsEntity )) {
62+ return allPermissions .stream ().map (p -> (ApiKeyPairPermission ) p ).collect (Collectors .toList ());
63+ }
64+
65+ Map <String , RolePermissionEntity .Permission > keyPairPermissionInfo = roleService .getRoleRulesAndPermissions (keyPairPermissionsEntity );
66+ if (!roleService .roleHasPermission (keyPairPermissionInfo , rolePermissionEntity )) {
67+ for (RolePermissionEntity rolePermission : keyPairPermissionsEntity ) {
68+ if (rolePermission .getPermission () == RolePermissionEntity .Permission .DENY && !rolePermissionEntity .contains (rolePermission )) {
69+ rolePermissionEntity .add (0 , rolePermission );
70+ }
71+ }
72+ }
5473 }
55- return rolePermissionsDao .findAllByRoleIdSorted (roleId ).stream ().map (p -> {
74+
75+ return rolePermissionEntity .stream ().map (p -> {
5676 ApiKeyPairPermissionVO permission = new ApiKeyPairPermissionVO ();
5777 permission .setRule (p .getRule ().getRuleString ());
5878 permission .setDescription (p .getDescription ());
0 commit comments