You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/triply-db-getting-started/reference/index.md
+25-2Lines changed: 25 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,10 +11,13 @@ Access Levels can be specified for the following content:
11
11
- Datasets, including everything that exist at the dataset level, such as metadata, settings, graphs, and services.
12
12
- Queries
13
13
- Stories
14
+
- Groups
14
15
15
16
### Access level control
16
17
17
-
The Access Level control (see [Figure 1](#fig-access-level-control)) is available on the settings page for these content types. The Access Level control also appears on the create dialog for these content types. The standard Access Level is always "Private". An explicit user action is needed to set the Access Level to "Internal" or "Public".
18
+
The Access Level control (see [Figure 1](#fig-access-level-control)) is available on the settings page for datasets, queries, and stories. The Access Level control also appears on the create dialog for these content types. The standard Access Level is always "Private". An explicit user action is needed to set the Access Level to "Internal" or "Public".
19
+
20
+
Groups behave differently: they are "Public" by default, and their Access Level is currently set through the [API](../../triply-api/index.md) or [TriplyDB.js](../../triplydb-js/group/index.md#groupupdatemetadata-object) rather than through this control. See [Access Levels for groups](#access-levels-for-groups).
18
21
19
22
<figureid="fig-access-level-control">
20
23
<imgsrc="../../assets/access-level-control.png">
@@ -41,9 +44,29 @@ The following table contains the meaning of the Access Levels for content that b
41
44
42
45
Access Levels cannot be specified for the following content. This means that this content is always publicly accessible:
43
46
44
-
- Groups, including their metadata and members.
45
47
- Users, including their metadata.
46
48
49
+
### Access Levels for groups
50
+
51
+
Next to the Access Levels of the content it owns, a group has an Access Level of its own. It determines who can find the group in the list of accounts and open its page:
|| Private | The group is only visible to its members. |
56
+
|| Internal | The group is visible to anyone who is logged into the same TriplyDB environment. |
57
+
|| Public | The group is visible to anyone on the Internet. |
58
+
59
+
Groups can be nested: a group can contain subgroups. Membership is inherited downwards, so a member of a group is also a member of every subgroup below it, with the same role.
60
+
61
+
Unlike datasets, queries, and stories, a newly created group is "Public" by default. A newly created subgroup instead takes the Access Level of its parent group. Changing the Access Level of a group requires the "Manage group" permission (see [Roles](#roles)), and is done through the [API](../../triply-api/index.md) or [TriplyDB.js](../../triplydb-js/group/index.md#groupupdatemetadata-object).
62
+
63
+
A group that you are not allowed to see is indistinguishable from a group that does not exist: opening its page gives the same "not found" result. If you are a member of a group nested below it, you do see its name and avatar — its name is part of your own group's name anyway — but not its members, content, or settings.
64
+
65
+
Two rules keep the Access Level of a group consistent with its surroundings:
66
+
67
+
-**A group caps the content it owns.** The datasets, queries, and stories owned by a group can never be more accessible than the group itself. Making a group stricter therefore fails as long as it still owns content that is more accessible; that content must be changed first.
68
+
-**A subgroup can never be more accessible than its parent group.** Making a parent group stricter fails as long as it still has a more accessible subgroup.
69
+
47
70
### Access Level dependencies
48
71
49
72
The Access Levels for datasets, queries, and stories may affect each other. For example, a public query may use a private dataset. This means that visitors who are not logged in, can see the query, its metadata, and its query string; however, such visitors will never receive query results from the private dataset. This ensures that private content always stays private, as intended.
Copy file name to clipboardExpand all lines: docs/triplydb-changelog/index.md
+19Lines changed: 19 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,6 +6,25 @@ path: "/docs/triplydb-changelog"
6
6
[TOC]
7
7
8
8
9
+
## 26.8.100 {#26.8.100}
10
+
11
+
**Release date:** 2026-08-05
12
+
13
+
**Features**
14
+
15
+
-`#12498`[Access Control] Groups now have an access level — `public`, `internal`, or `private` — just like datasets. The access level determines who can find the group in account listings and open its page, and it caps the access level of the datasets, queries, stories, and subgroups that the group owns. New groups are `public` by default, and a subgroup takes its parent's access level and can never be more open than its parent. The level is set through the API or with the `accessLevel` key in [TriplyDB.js](https://docs.triply.cc/triplydb-js/group/), when creating, ensuring, or updating a group; see [Access Levels for groups](https://docs.triply.cc/triply-db-getting-started/reference/#access-levels-for-groups).
16
+
-`#11638`[SPARQL] The query optimizer now interleaves operations across independent parts of a join, instead of running each part to completion before starting the next. This produces cheaper query plans in some cases; queries are never slower and are sometimes faster.
17
+
-[Data Upload] Each URL in a "download from URL" job can now carry its own HTTP headers, so data can be imported from sources that require for example an `Authorization` header. Requests that point at the TriplyDB instance itself automatically reuse the caller's own authorization, and need no header of their own.
18
+
19
+
**Issues fixed**
20
+
21
+
-`#13056`[Insights] Viewing the class-frequency diagram for a graph with no classes (or more classes than the supported limit) could throw an error instead of showing an empty chart.
22
+
-`#11548`[Data Model] The schema view could show a redundant `rdfs:subClassOf` edge alongside the `owl:equivalentClass` edge between the same two classes.
23
+
-`#11433`[API] Requests in progress during a scheduled deploy or maintenance window could occasionally fail with a transient server error.
24
+
-[Query Jobs] A completed `select` query job's downloaded results reported one more result row than it actually contained, because the JSONL header line was counted as a row.
25
+
-`#12858``#12859`[SPARQL] The query planner underestimated the cost of property paths and of aggregates, because it treated variables that only become bound by the operation itself as already bound. This could result in a suboptimal join order.
Copy file name to clipboardExpand all lines: docs/triplydb-js/group/index.md
+26-2Lines changed: 26 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -216,6 +216,30 @@ Inherited from [`Account.setAvatar(file: string)`](../account/index.md#accountse
216
216
<aid="organizationupdatemetadata-object"></a>
217
217
## Group.update(metadata: object)
218
218
219
-
Updates the metadata for this account.
219
+
Updates the metadata for this group.
220
220
221
-
Inherited from [`Account.update(metadata: object)`](../account/index.md#accountupdatemetadata-object).
221
+
Inherited from [`Account.update(metadata: object)`](../account/index.md#accountupdatemetadata-object), and next to the keys documented there the metadata object also accepts a key that only applies to groups:
222
+
223
+
<dl>
224
+
<dt><code>accessLevel</code></dt>
225
+
<dd>
226
+
<p>The access level of the group, which determines who can find the group and open its page. The following values are supported:</p>
227
+
<dl>
228
+
<dt><code>'private'</code></dt>
229
+
<dd>The group can only be seen by its members.</dd>
230
+
<dt><code>'internal'</code></dt>
231
+
<dd>The group can be seen by people who are logged into the same TriplyDB instance.</dd>
232
+
<dt><code>'public'</code></dt>
233
+
<dd>The group can be seen by everybody on the Internet.</dd>
234
+
</dl>
235
+
<p>Changing the access level requires the "Manage group" permission. The change is rejected when the group would end up more accessible than its parent group, or stricter than a dataset, query, story, or subgroup that it owns — lower the access level of that content first. See <a href='../../triply-db-getting-started/reference/index.md#access-levels-for-groups'>Access Levels for groups</a> for details.</p>
236
+
<p>Requires TriplyDB API version 26.8.100 or greater; setting it against an older instance throws an <code>IncompatibleError</code>.</p>
Copy file name to clipboardExpand all lines: docs/triplydb-js/user/index.md
+44Lines changed: 44 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -73,6 +73,21 @@ This method requires an API token with write access for this user.
73
73
- The optional `metadata` argument can be used to specify additional metadata. This is a dictionary object with the following optional keys:
74
74
75
75
<dl>
76
+
<dt><code>accessLevel</code></dt>
77
+
<dd>
78
+
<p>The access level of the group, which determines who can find the group and open its page. The following values are supported:</p>
79
+
<dl>
80
+
<dt><code>'private'</code></dt>
81
+
<dd>The group can only be seen by its members.</dd>
82
+
<dt><code>'internal'</code></dt>
83
+
<dd>The group can be seen by people who are logged into the same TriplyDB instance.</dd>
84
+
<dt><code>'public'</code> (default)</dt>
85
+
<dd>The group can be seen by everybody on the Internet.</dd>
86
+
</dl>
87
+
<p>A subgroup defaults to the access level of its parent group instead of to <code>'public'</code>, and can never be more accessible than its parent. See <a href='../../triply-db-getting-started/reference/index.md#access-levels-for-groups'>Access Levels for groups</a> for details.</p>
88
+
<p>Requires TriplyDB API version 26.8.100 or greater; setting it against an older instance throws an <code>IncompatibleError</code>.</p>
89
+
</dd>
90
+
76
91
<dt><code>description</code></dt>
77
92
<dd>The description of the group. This description can make use of Markdown.</dd>
78
93
@@ -92,6 +107,13 @@ const user = await triply.getUser('john-doe')
Ensures the existence of a group with the given `name`. If no such group exists yet, it is created with the specified `metadata` and this user as its owner; if it already exists, it is returned unchanged.
128
+
129
+
### Access restrictions
130
+
131
+
This method requires an API token with write access for this user.
132
+
133
+
### Arguments
134
+
135
+
The `name` and `metadata` arguments are the same as for [`User.createGroup(name: string, metadata?: object)`](#usercreategroupname-string-metadata-object).
136
+
137
+
If the group already exists and `metadata` specifies an `accessLevel` that differs from the access level of the existing group, an error is thrown rather than the existing group being returned. This prevents code from continuing under the assumption that it ensured, for example, a private group while the group is in fact public. Either change the access level of the group so that it matches, or omit the `accessLevel` key entirely.
138
+
139
+
### Examples
140
+
141
+
```ts
142
+
const user =awaittriply.getUser('john-doe')
143
+
const group =awaituser.ensureGroup('my-group', {name: 'My Group'})
144
+
```
145
+
146
+
103
147
## User.getDataset(name: string)
104
148
105
149
Returns the TriplyDB dataset with the given `name` that is published by this user.
This changelog covers technical changes related to TriplyDB on-premise deployments. See [here](/triplydb-changelog) for the TriplyDB changelog that is user facing.
0 commit comments