public UserEx getWrappedUser()

in teamcity-invitations-plugin-server/src/main/java/org/jetbrains/teamcity/invitations/AdditionalPermissionsUserWrapper.java [28:66]


    public UserEx getWrappedUser() {
        return (UserEx) Proxy.newProxyInstance(getClass().getClassLoader(), new Class<?>[]{UserEx.class},
                (proxy, method, args) -> {
                    if (enabled.get()) {
                        switch (method.getName()) {
                            case "isPermissionGrantedForProject":
                                List<Permission> projectPermissions = additionalPermissions.get(args[0]);
                                if (projectPermissions != null && projectPermissions.contains(args[1])) {
                                    return true;
                                } else {
                                    return invoke(method, args);
                                }

                            case "isPermissionGrantedForAnyProject":
                                if (additionalPermissions.values().stream().anyMatch(list -> list.contains(args[0]))) {
                                    return true;
                                } else {
                                    return invoke(method, args);
                                }

                            case "getPermissionsGrantedForProject": {
                                projectPermissions = additionalPermissions.get(args[0]);
                                if (projectPermissions != null) {
                                    List<Permission> base = ((Permissions) invoke(method, args)).toList();
                                    base.addAll(projectPermissions);
                                    return new Permissions(base);
                                } else {
                                    return invoke(method, args);
                                }
                            }

                            default:
                                return invoke(method, args);
                        }
                    } else {
                        return invoke(method, args);
                    }
                });
    }