Skip to content

Commit 0cba812

Browse files
docs: release Open Self Service 1.5.0 (#606)
* feat: release Open Self Service 1.5.0 with permission-based access control and Zendesk integration * fix(docs): correct typos and update paths in O2S 1.5.0 release notes * fix(docs): update integration paths and replace `<a>` with `<Link>` in `DocLinkTiles` component * fix(docs): update integration paths and add Zendesk integration image in O2S 1.5.0 release notes
1 parent 2c87a18 commit 0cba812

5 files changed

Lines changed: 111 additions & 5 deletions

File tree

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
---
2+
slug: open-self-service-release-1.5.0
3+
title: Open Self Service Release 1.5.0
4+
date: 2026-01-29T12:00
5+
tags: [releases]
6+
authors: [marcin.krasowski]
7+
toc_max_heading_level: 2
8+
image: /img/o2s-1.5.0-header.png
9+
---
10+
11+
![o2s-1.5.0-header.png](/img/blog/o2s-1.5.0-header.png)
12+
13+
We're excited to announce Release 1.5.0 of Open Self Service! This release delivers a comprehensive **Permission-Based Access Control** system that works alongside role-based access, full **ticket creation in Zendesk** with attachments and custom fields, and also an **improved development workflow** with granular watch commands for Turborepo.
14+
15+
Let's dive into what's new!
16+
17+
<!--truncate-->
18+
19+
## New features
20+
21+
### Permission-Based Access Control
22+
23+
We've introduced a comprehensive Permission-Based Access Control system that works together with an already existing Role-Based Access Control. You now get a full, organization-level access control: roles and permissions are kept at the organization/customer level, so the same user can have different access when switching between organizations.
24+
25+
#### Framework and core
26+
27+
- Enhanced with abstract permission logic with methods (like `hasPermission` or `hasRole`) to check for roles and permissions. Specific integrations can now implement them on their own to provide permissions from your IAM system.
28+
- Global `RolesGuard` and `PermissionsGuard` are now available, so all protected endpoints can enforce roles and permissions consistently.
29+
30+
#### Securing controllers with `@Permissions`
31+
32+
Use the `@Auth.Decorators.Permissions` decorator to protect block and API endpoints by resource and actions:
33+
34+
```typescript
35+
import { Auth } from '@o2s/framework/modules';
36+
37+
@Controller(URL)
38+
export class TicketListController {
39+
@Get()
40+
@Auth.Decorators.Permissions({ resource: 'tickets', actions: ['view'] })
41+
getTicketListBlock(...) {
42+
...
43+
}
44+
}
45+
```
46+
47+
You can combine `@Auth.Decorators.Roles` and `@Auth.Decorators.Permissions` on the same handler when you need both role-based and permission-based checks.
48+
49+
#### Data filtering based on user roles
50+
51+
Mappers (e.g., `page.mapper`, header/footer navigation mappers) can filter UI elements based on user roles. Navigation items and other CMS-driven content can be restricted by role so users only see links and sections they are allowed to access.
52+
53+
:::tip
54+
For organization-level access control, roles vs. permissions, and multi-organization support, see [Authentication overview](../../../docs/overview/authentication) and [API Harmonization authentication](../../../docs/main-components/harmonization-app/authentication).
55+
:::
56+
57+
### Ticket creation in Zendesk integration
58+
59+
The [Zendesk integration](../../../docs/integrations/tickets/zendesk/overview) now supports creating tickets end-to-end, in addition to viewing and listing them.
60+
61+
![zendesk integration](../../../static/img/blog/o2s-zendesk-integration.png)
62+
63+
- You can now create new tickets via the Tickets API. The Zendesk integration implements `createTicket` and forwards requests to the Zendesk API.
64+
- Attachments are supported when creating tickets.
65+
- Custom field mapping is handled by the `ZendeskFieldMapper`. Configure environment variables (e.g., `ZENDESK_DEVICE_NAME_FIELD_ID`) and add corresponding entries in your CMS mappers to display custom field labels in the UI.
66+
- Using our [Survey.js form block](../../../docs/integrations/forms/surveyjs/overview), you can submit custom forms to Zendesk. This gives you full control over form layout (single- or multi-step, splitting fields into sections/columns, and more) independently of Zendesk configuration.
67+
68+
### Dev watch task improvement
69+
70+
The development workflow has been improved with **granular watch commands** for Turborepo:
71+
72+
- `watch:deps`: runs `turbo watch build` for all packages except apps. Use this to build and watch dependencies (packages, integrations, blocks) so that changes propagate to apps.
73+
- `watch:apps`: runs `turbo run dev` for apps. Use this to run Next.js and Nest.js dev servers.
74+
75+
You can run `watch:deps` in one terminal and `watch:apps` in another for a more controlled dev setup. This provides better output handling than a single monorepo-wide dev command and aligns with Turborepo’s recommended patterns for large workspaces.
76+
77+
:::tip
78+
Prefer `npm run watch:deps` and `npm run watch:apps` over `npm run dev` when you need fine-grained control over building dependencies versus running app dev servers.
79+
:::
80+
81+
:::info
82+
The `npm run dev` script is now **deprecated** and will be removed in future versions.
83+
:::
84+
85+
## Other changes
86+
87+
### Dependency updates
88+
89+
This release includes notable dependency upgrades:
90+
91+
- **Next.js 16.1.6** across the frontend and relevant packages,
92+
- **React** monorepo updates,
93+
- **Storybook 10.2.1**,
94+
- Other updates across the stack (e.g., recharts, swiper, next-intl) for compatibility and security.
95+
96+
### Documentation improvements
97+
98+
- Authentication and authorization docs now cover the new Permission-Based Access Control, organization-level access control, and when to use roles vs. permissions.
99+
- Zendesk integration docs have been updated for ticket creation, custom fields, and Survey.js-driven forms.
100+
- Various fixes and clarifications across integration and main-component documentation.
101+
102+
### Bugfixing and security updates
103+
104+
As always, we're committed to maintaining a stable and secure platform. This release includes various bug fixes and security updates, including dependency updates with security patches.

apps/docs/docs/integrations/overview.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ import DocLinkTiles from '@site/src/components/DocLinkTiles';
2222
items={[
2323
{ title: 'Strapi CMS', description: 'Headless CMS integration for content & page management.', href: '/docs/integrations/cms/strapi/overview' },
2424
{ title: 'Contentful CMS', description: 'CMS for multi-language content and marketing blocks.', href: '/docs/integrations/cms/contentful/overview' },
25-
{ title: 'Redis Cache', description: 'High-performance caching with Redis to be used with our API Harmonization server.', href: '/docs/integrations/cache/redis' },
26-
{ title: 'Medusa Commerce', description: 'Initial integration, currently provides basic product data.', href: '/docs/integrations/commerce/medusa-js' },
25+
{ title: 'Redis Cache', description: 'High-performance caching with Redis to be used with our API Harmonization server.', href: '/docs/integrations/cache/redis/overview' },
26+
{ title: 'Medusa Commerce', description: 'Initial integration, currently provides basic product data.', href: '/docs/integrations/commerce/medusa-js/overview' },
2727
{ title: 'Algolia Search', description: 'The AI search platform, used for knowledge base search.', href: '/docs/integrations/search/algolia/overview' },
28-
{ title: 'SurveyJS Forms', description: 'Dynamic form creation and ticket submission. Used as a default engine for our ticket submission handling.', href: '/docs/integrations/forms/surveyjs' },
28+
{ title: 'SurveyJS Forms', description: 'Dynamic form creation and ticket submission. Used as a default engine for our ticket submission handling.', href: '/docs/integrations/forms/surveyjs/overview' },
2929
{ title: 'Zendesk', description: 'External ticketing and support knowledge base system.', href: '/docs/integrations/tickets/zendesk/overview' },
3030
{ title: 'Auth.js', description: 'Authentication adapter supporting OAuth and custom providers.', href: '/docs/main-components/frontend-app/authentication' },
3131
{ title: 'Mocked Data', description: 'Development and testing with mocked integrations - use it to quickly start developing without any external API.', href: '/docs/integrations/mocked' },

apps/docs/src/components/DocLinkTiles/index.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import React from 'react';
22

3+
import Link from '@docusaurus/Link';
4+
35
export type DocLinkItem = {
46
title: string;
57
description: string;
@@ -14,12 +16,12 @@ export default function DocLinkTiles({ items }: DocLinkTilesProps) {
1416
return (
1517
<div className="docLinkTiles-grid">
1618
{items.map((item) => (
17-
<a key={item.href} href={item.href} className="docLinkTiles-item">
19+
<Link key={item.href} href={item.href} className="docLinkTiles-item">
1820
<div className="label">
1921
<div className="docLinkTiles-title">{item.title}</div>
2022
<div className="docLinkTiles-description">{item.description}</div>
2123
</div>
22-
</a>
24+
</Link>
2325
))}
2426
</div>
2527
);
1.54 MB
Loading
1.16 MB
Loading

0 commit comments

Comments
 (0)