Skip to content

Commit 46e88ab

Browse files
committed
More fixed links -> stick to relative ones
1 parent 3bb02cb commit 46e88ab

File tree

13 files changed

+34
-34
lines changed

13 files changed

+34
-34
lines changed

guides/advanced/publishing-apis/asyncapi.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ If you want to generate one AsyncAPI document for all the services, you can use
3434
cds compile srv --service all -o docs --to asyncapi --asyncapi:merged
3535
```
3636

37-
[Learn how to programmatically convert the CSN file into an AsyncAPI Document](/node.js/cds-compile#to-asyncapi){.learn-more}
37+
[Learn how to programmatically convert the CSN file into an AsyncAPI Document](../../../node.js/cds-compile#to-asyncapi){.learn-more}
3838

3939
## Presets { #presets}
4040

guides/databases/sqlite.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ Configure the build to create an initial _schema.sql_ file for SQLite using `cds
106106
:::
107107

108108

109-
[Learn more about creating an initial database schema](/java/cqn-services/persistence-services#initial-database-schema-1){.learn-more}
109+
[Learn more about creating an initial database schema](../../java/cqn-services/persistence-services#initial-database-schema-1){.learn-more}
110110

111111
</div>
112112

guides/deploy/to-cf.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ cds add xsuaa
159159
```
160160

161161
::: tip This will also generate an `xs-security.json` file
162-
The roles/scopes are derived from authorization-related annotations in your CDS models. Ensure to rerun `cds compile --to xsuaa`, as documented in the [_Authorization_ guide](/guides/security/authorization#xsuaa-configuration) whenever there are changes to these annotations.
162+
The roles/scopes are derived from authorization-related annotations in your CDS models. Ensure to rerun `cds compile --to xsuaa`, as documented in the [_Authorization_ guide](../security/authorization#xsuaa-configuration) whenever there are changes to these annotations.
163163
:::
164164

165165
[Learn more about SAP Authorization and Trust Management/XSUAA.](https://discovery-center.cloud.sap/serviceCatalog/authorization-and-trust-management-service?region=all){.learn-more}

guides/extensibility/customization.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -969,7 +969,7 @@ Obtain these two from the `VCAP_SERVICES` environment variable in your deployed
969969
970970
**Note:** The `key` and `clientsecret` properties are secrets that should not be stored in an unsafe location in productive scenarios!
971971
972-
[Learn more about environment variables / `VCAP_Services`.](/node.js/cds-connect#bindings-in-cloud-platforms){.learn-more}
972+
[Learn more about environment variables / `VCAP_Services`.](../../node.js/cds-connect#bindings-in-cloud-platforms){.learn-more}
973973
974974
If you leave out the respective secret (enclosed in square brackets above), you will be prompted to enter it interactively.
975975
This can be used to feed the secret from the environment to `cds login` via standard input, like so:

guides/multitenancy/index.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ In a first terminal, start the MTX sidecar process:
329329
[cds] - [ terminate with ^C ]
330330
```
331331

332-
[If you get an error on server start, read the troubleshooting information.](/get-started/troubleshooting#why-do-i-get-an-error-on-server-start){.learn-more}
332+
[If you get an error on server start, read the troubleshooting information.](../../get-started/troubleshooting#why-do-i-get-an-error-on-server-start){.learn-more}
333333
:::
334334

335335

@@ -667,7 +667,7 @@ You should now see the route mapped to your application.
667667
668668
There are several ways to update the database schema of a multitenant application.
669669
670-
* For **CAP Java** applications, schema updates should be done as described in the respective [Java Guide](/java/multitenancy#database-update)
670+
* For **CAP Java** applications, schema updates should be done as described in the respective [Java Guide](../../java/multitenancy#database-update)
671671
* For **CAP Node.js** applications, you can use either of:
672672
- the `cds-mtx upgrade` command from a terminal
673673
- the [MTX Sidecar API](mtxs#upgrade-tenants-→-jobs)
@@ -778,7 +778,7 @@ For CAP Java, all these services are supported natively and SaaS dependencies ar
778778
:::tip Explicitly activate the Destination service
779779
SaaS dependency for Destination service needs to be activated explicitly in the `application.yaml` due to security reasons. SaaS dependencies for some of the other services can be **de**activated by setting the corresponding property to `false` in the `application.yaml`.
780780
781-
Refer to the `cds.multiTenancy.dependencies` section in the [CDS properties](/java/developing-applications/properties#cds-properties).
781+
Refer to the `cds.multiTenancy.dependencies` section in the [CDS properties](../../java/developing-applications/properties#cds-properties).
782782
:::
783783
784784
For CAP Node.js, all these services are supported natively and can be activated individually by providing configuration in `cds.requires`. In the most common case, you simply activate service dependencies like so:

guides/security/authorization.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ From perspective of CAP, the authentication method is freely customizable. For c
4242

4343
Find detailed instructions for setting up authentication in these runtime-specific guides:
4444

45-
- [Set up authentication in Node.js.](/node.js/authentication)
46-
- [Set up authentication in Java.](/java/security#authentication)
45+
- [Set up authentication in Node.js.](../../node.js/authentication)
46+
- [Set up authentication in Java.](../../java/security#authentication)
4747

4848

4949
In _productive_ environment with security middleware activated, **all protocol adapter endpoints are authenticated by default**<sup>1</sup>, even if no [restrictions](#restrictions) are configured. Multi-tenant SaaS-applications require authentication to provide tenant isolation out of the box. In case there is the business need to expose open endpoints for anonymous users, it's required to take extra measures depending on runtime and security middleware capabilities.
@@ -110,7 +110,7 @@ For XSUAA or IAS authentication, the request user is attached with the pseudo ro
110110
:::
111111

112112
#### internal-user
113-
Pseudo-role `internal-user` allows to define application endpoints that can be accessed exclusively by the own PaaS tenant (technical communication). The advantage is that similar to `system-user` no technical CAP roles need to be defined to protect such internal endpoints. However, in contrast to `system-user`, the endpoints protected by this pseudo-role do not allow requests from any external technical clients. Hence is suitable for **technical intra-application communication**, see [Security > Application Zone](/guides/security/overview#application-zone).
113+
Pseudo-role `internal-user` allows to define application endpoints that can be accessed exclusively by the own PaaS tenant (technical communication). The advantage is that similar to `system-user` no technical CAP roles need to be defined to protect such internal endpoints. However, in contrast to `system-user`, the endpoints protected by this pseudo-role do not allow requests from any external technical clients. Hence is suitable for **technical intra-application communication**, see [Security > Application Zone](../../guides/security/overview#application-zone).
114114

115115
::: tip
116116
For XSUAA or IAS authentication, the request user is attached with the pseudo role `internal-user` if the presented JWT token has been issued with grant type `client_credentials` or `client_x509` on basis of the **identical** XSUAA or IAS service instance.
@@ -137,8 +137,8 @@ CAP does not make any assumptions on the presented claims given in the token. St
137137
In most cases, CAP's default mapping will match your requirements, but CAP also allows you to customize the mapping according to specific needs. For instance, `user_name` in XSUAA tokens is generally not unique if several customer IdPs are connected to the underlying identity service.
138138
Here a combination of `user_name` and `origin` mapped to `$user` might be a feasible solution that you implement in a custom adaptation. Similarly, attribute values can be normalized and prepared for [instance-based authorization](#instance-based-auth). Find details and examples how to programmatically redefine the user mapping here:
139139

140-
- [Set up Authentication in Node.js.](/node.js/authentication)
141-
- [Custom Authentication in Java.](/java/security#custom-authentication)
140+
- [Set up Authentication in Node.js.](../../node.js/authentication)
141+
- [Custom Authentication in Java.](../../java/security#custom-authentication)
142142

143143
::: warning Be very careful when redefining `$user`
144144
The user name is frequently stored with business data (for example, `managed` aspect) and might introduce migration efforts. Also consider data protection and privacy regulations when storing user data.
@@ -173,7 +173,7 @@ service BookshopService {
173173
}
174174
```
175175

176-
Note that both annotations introduce access control on an entity level. In contrast, for the sake of [input validation](/guides/services/providing-services#input-validation), you can also use `@readonly` on a property level.
176+
Note that both annotations introduce access control on an entity level. In contrast, for the sake of [input validation](../../guides/services/providing-services#input-validation), you can also use `@readonly` on a property level.
177177

178178
In addition, annotation `@Capabilities` from standard OData vocabulary is enforced by the runtimes analogously:
179179

@@ -225,7 +225,7 @@ In general, **implicitly auto-exposed entities cannot be accessed directly**, th
225225

226226
In contrast, **explicitly auto-exposed entities can be accessed directly, but only as `@readonly`**. The rationale behind that is that entities representing value lists need to be readable at the service level, for instance to support value help lists.
227227

228-
See details about `@cds.autoexpose` in [Auto-Exposed Entities](/guides/services/providing-services#auto-exposed-entities).
228+
See details about `@cds.autoexpose` in [Auto-Exposed Entities](../../guides/services/providing-services#auto-exposed-entities).
229229

230230
This results in the following access matrix:
231231

@@ -278,7 +278,7 @@ The following values are supported:
278278

279279
- The `to` property lists all [user roles](#roles) or [pseudo roles](#pseudo-roles) that the privilege applies to. Note that the `any` pseudo-role applies for all users and is the default if no value is provided.
280280

281-
- The `where`-clause can contain a Boolean expression in [CQL](/cds/cql)-syntax that filters the instances that the event applies to. As it allows user values (name, attributes, etc.) and entity data as input, it's suitable for *dynamic authorizations based on the business domain*. Supported expressions and typical use cases are presented in [instance-based authorization](#instance-based-auth).
281+
- The `where`-clause can contain a Boolean expression in [CQL](../../cds/cql)-syntax that filters the instances that the event applies to. As it allows user values (name, attributes, etc.) and entity data as input, it's suitable for *dynamic authorizations based on the business domain*. Supported expressions and typical use cases are presented in [instance-based authorization](#instance-based-auth).
282282

283283
A privilege is met, if and only if **all properties are fulfilled** for the current request. In the following example, orders can only be read by an `Auditor` who meets `AuditBy` element of the instance:
284284

@@ -509,7 +509,7 @@ annotate Articles with @(restrict: [
509509
{ grant: ['UPDATE'], to: 'Vendor', where: (stock > 0) } ]);
510510
```
511511

512-
You can define `where`-conditions in restrictions based on [CQL](/cds/cql)-where-clauses.<br>
512+
You can define `where`-conditions in restrictions based on [CQL](../../cds/cql)-where-clauses.<br>
513513
Supported features are:
514514
* Predicates with arithmetic operators.
515515
* Combining predicates to expressions with `and` and `or` logical operators.
@@ -641,7 +641,7 @@ Be aware that deep paths might introduce a performance bottleneck. Access Contro
641641

642642
### Association Paths { #association-paths}
643643

644-
The `where`-condition in a restriction can also contain [CQL path expressions](/cds/cql#path-expressions) that navigate to elements of associated entities:
644+
The `where`-condition in a restriction can also contain [CQL path expressions](../../cds/cql#path-expressions) that navigate to elements of associated entities:
645645

646646
```cds
647647
service SalesOrderService @(requires: 'authenticated-user') {
@@ -811,7 +811,7 @@ As shown before, defining an adequate authorization strategy has a deep impact o
811811

812812
### Separation of Concerns
813813

814-
Consider using [CDS Aspects](/cds/cdl#aspects) to separate the actual service definitions from authorization annotations as follows:
814+
Consider using [CDS Aspects](../../cds/cdl#aspects) to separate the actual service definitions from authorization annotations as follows:
815815

816816
<!--- % include _code sample='services.cds' %} -->
817817
::: code-group
@@ -855,8 +855,8 @@ The service provider frameworks **automatically enforce** restrictions in generi
855855

856856
If generic enforcement doesn't fit your needs, you can override or adapt it with **programmatic enforcement** in custom handlers:
857857

858-
- [Authorization Enforcement in Node.js](/node.js/authentication#enforcement)
859-
- [Enforcement API & Custom Handlers in Java](/java/security#enforcement-api)
858+
- [Authorization Enforcement in Node.js](../../node.js/authentication#enforcement)
859+
- [Enforcement API & Custom Handlers in Java](../../java/security#enforcement-api)
860860

861861
## Role Assignments with IAS and AMS
862862

@@ -968,7 +968,7 @@ Inline configuration in the _mta.yaml_ `config` block and the _xs-security.json_
968968

969969
### 3. Assembling Roles and Assigning Roles to Users
970970

971-
This is a manual step an administrator would do in SAP BTP Cockpit. See [Set Up the Roles for the Application](/node.js/authentication#auth-in-cockpit) for more details. If a user attribute isn't set for a user in the IdP of the SAP BTP Cockpit, this means that the user has no restriction for this attribute. For example, if a user has no value set for an attribute "Country", they're allowed to see data records for all countries.
971+
This is a manual step an administrator would do in SAP BTP Cockpit. See [Set Up the Roles for the Application](../../node.js/authentication#auth-in-cockpit) for more details. If a user attribute isn't set for a user in the IdP of the SAP BTP Cockpit, this means that the user has no restriction for this attribute. For example, if a user has no value set for an attribute "Country", they're allowed to see data records for all countries.
972972
In the _xs-security.json_, the `attribute` entity has a property `valueRequired` where the developer can specify whether unrestricted access is possible by not assigning a value to the attribute.
973973

974974

guides/security/data-protection.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ CAP doesn't require any specific authentication strategy, but it provides out of
118118
On configured authentication, *all CAP endpoints are authenticated by default*.
119119

120120
::: warning
121-
**CAP applications need to ensure that an appropriate [authentication method](/guides/security/authorization#prerequisite-authentication) is configured**.
121+
**CAP applications need to ensure that an appropriate [authentication method](authorization#prerequisite-authentication) is configured**.
122122
It's highly recommended to establish integration tests to safeguard a valid configuration.
123123
:::
124124

@@ -180,9 +180,9 @@ The set of rules that apply to a user reflects a specific conceptual role that d
180180
Obviously, the business roles are dependent from the scenarios and hence *need to be defined by the application developers*.
181181

182182
Enforcing authorization rules at runtime is highly security-critical and shouldn't be implemented by the application as this would introduce the risk of security flaws.
183-
Instead, [CAP authorizations](/guides/security/authorization) follow a declarative approach allowing applications to design comprehensive access rules in the CDS model.
183+
Instead, [CAP authorizations](authorization) follow a declarative approach allowing applications to design comprehensive access rules in the CDS model.
184184

185-
Resources in the model such as services or entities can be restricted to users that fulfill specific conditions as declared in `@requires` or `@restrict` [annotations](/guides/security/authorization#restrictions).
185+
Resources in the model such as services or entities can be restricted to users that fulfill specific conditions as declared in `@requires` or `@restrict` [annotations](authorization#restrictions).
186186
According to the declarations, server-side authorization enforcement is guaranteed for all requests. It's executed close before accessing the corresponding resources.
187187

188188
::: warning
@@ -196,7 +196,7 @@ To verify CAP authorizations in your model, it's recommended to use [CDS lint ru
196196

197197
The rules prepared by application developers are applied to business users according to grants given by the subscribers user administrator, that is, they're applied tenant-specific.
198198

199-
CAP authorizations can be defined dependently from [user claims](/guides/security/authorization#user-claims) such as [XSUAA scopes or attributes](https://help.sap.com/docs/btp/sap-business-technology-platform/application-security-descriptor-configuration-syntax)
199+
CAP authorizations can be defined dependently from [user claims](authorization#user-claims) such as [XSUAA scopes or attributes](https://help.sap.com/docs/btp/sap-business-technology-platform/application-security-descriptor-configuration-syntax)
200200
that are deployed by application developers and granted by the user administrator of the subscriber.
201201
Hence, CAP provides a seamless integration of central identity service without technical lock-in.
202202

@@ -222,7 +222,7 @@ Based on the CDS model and configuration of CDS services, the CAP runtime expose
222222
| Name | Configuration | URL | Authorization |
223223
|-------------------|------------------|-------------------------------------------|-----------------------------------------------|
224224
| CDS Service `Foo` | `service Foo {}` | `/<protocol-path>/Foo/**`<sup>1</sup> | `@restrict`/`@requires`<sup>2</sup> |
225-
| | OData v2/v4 | `/<odata-path>/Foo/$metadata`<sup>1</sup> | See [here](/guides/security/authorization#requires) |
225+
| | OData v2/v4 | `/<odata-path>/Foo/$metadata`<sup>1</sup> | See [here](authorization#requires) |
226226
| Index page | | `/index.html` | none, but disabled in production |
227227

228228
> <sup>1</sup> See [protocols and paths](../../java/cqn-services/application-services#configure-path-and-protocol)
@@ -302,7 +302,7 @@ CAP guarantees that code for business requests runs on a DB connection opened fo
302302
### Isolated Transient Data { #isolated-transient-data }
303303

304304
Although CAP microservices are stateless, the CAP Java runtime (generic handlers inclusive) needs to cache data in-memory for performance reasons.
305-
For instance, filters for [instance-based authorization](/guides/security/authorization#instance-based-auth) are constructed only once and are reused in subsequent requests.
305+
For instance, filters for [instance-based authorization](authorization#instance-based-auth) are constructed only once and are reused in subsequent requests.
306306

307307
<div class="impl java">
308308

guides/uis/fiori.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,7 @@ SELECT.from(Books.drafts) //returns all drafts of the Books entity
520520

521521
## Use Roles to Toggle Visibility of UI elements
522522

523-
In addition to adding [restrictions on services, entities, and actions/functions](/guides/security/authorization#restrictions), there are use cases where you only want to hide certain parts of the UI for specific users. This is possible by using the respective UI annotations like `@UI.Hidden` or `@UI.CreateHidden` in conjunction with `$edmJson` pointing to a singleton.
523+
In addition to adding [restrictions on services, entities, and actions/functions](../security/authorization#restrictions), there are use cases where you only want to hide certain parts of the UI for specific users. This is possible by using the respective UI annotations like `@UI.Hidden` or `@UI.CreateHidden` in conjunction with `$edmJson` pointing to a singleton.
524524

525525
First, you define the [singleton](../advanced/odata#singletons) in your service and annotate it with [`@cds.persistence.skip`](../databases/index.md#cds-persistence-skip) so that no database artefact is created:
526526

node.js/_menu.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,4 @@
6262
# [Testing](cds-test)
6363
# [TypeScript](typescript)
6464
# [Best Practices](best-practices)
65-
# [Integrate with UCL](ucl)
65+
# [Integrate with UCL](../../node.js/ucl)

node.js/authentication.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ export default function custom_auth(req: Req, res: Response, next: NextFunction)
430430
}
431431
```
432432
433-
[If you want to customize the user ID, please also have a look at this example.](/node.js/cds-serve#customization-of-cds-context-user){.learn-more}
433+
[If you want to customize the user ID, please also have a look at this example.](cds-serve#customization-of-cds-context-user){.learn-more}
434434
435435
436436
## Authentication in Production

0 commit comments

Comments
 (0)