@Override
    public List<Permission> getPermissionsForUser(User user) {
        final GRN principal = grnRegistry.ofUser(user);
        final ImmutableSet.Builder<Permission> permSet = ImmutableSet.<Permission>builder()
                .addAll(user.getPermissions().stream().map(CaseSensitiveWildcardPermission::new).collect(Collectors.toSet()))
                .addAll(permissionAndRoleResolver.resolvePermissionsForPrincipal(principal))
                .addAll(getUserPermissionsFromRoles(user).stream().map(CaseSensitiveWildcardPermission::new).collect(Collectors.toSet()));

        return permSet.build().asList();
    }
@Test
    public void testGetPermissionsForUser() throws Exception {
        final InMemoryRolePermissionResolver permissionResolver = mock(InMemoryRolePermissionResolver.class);
        final GRNRegistry grnRegistry = GRNRegistry.createWithBuiltinTypes();
        final UserService userService = new UserServiceImpl(mongoConnection, configuration, roleService,
                accessTokenService, userFactory, permissionResolver,
                serverEventBus, grnRegistry, permissionAndRoleResolver);

        final UserImplFactory factory = new UserImplFactory(new Configuration(), permissions);
        final UserImpl user = factory.create(new HashMap<>());
        user.setName("user");
        final Role role = createRole("Foo");

        user.setRoleIds(Collections.singleton(role.getId()));
        user.setPermissions(Collections.singletonList("hello:world"));

        when(permissionResolver.resolveStringPermission(role.getId())).thenReturn(Collections.singleton("foo:bar"));
        final GRNPermission ownerShipPermission = GRNPermission.create(RestPermissions.ENTITY_OWN, grnRegistry.newGRN(GRNTypes.DASHBOARD, "1234"));
        final GRN userGRN = grnRegistry.ofUser(user);
        when(permissionAndRoleResolver.resolvePermissionsForPrincipal(userGRN))
                .thenReturn(ImmutableSet.of(
                        new CaseSensitiveWildcardPermission("perm:from:grant"),
                        ownerShipPermission));

        final String roleId = "12345";
        when(permissionAndRoleResolver.resolveRolesForPrincipal(userGRN)).thenReturn(ImmutableSet.of(roleId));
        when(permissionResolver.resolveStringPermission(roleId)).thenReturn(ImmutableSet.of("perm:from:role"));

        assertThat(userService.getPermissionsForUser(user).stream().map(p -> p instanceof CaseSensitiveWildcardPermission ? p.toString() : p).collect(Collectors.toSet()))
                .containsExactlyInAnyOrder("users:passwordchange:user", "users:edit:user", "foo:bar", "hello:world", "users:tokenlist:user",
                        "users:tokencreate:user", "users:tokenremove:user", "perm:from:grant", ownerShipPermission, "perm:from:role");
    }