@@ -12,7 +12,7 @@ Next](https://www.w3.org/community/ldpnext/)) type systems, such as the
12
12
[ Solid] ( https://github.com/solid/solid ) project (see also the parent
13
13
[ spec] ( https://github.com/solid/solid-spec ) ).
14
14
15
- ** Current Spec version:** ` v.0.3.1 ` (see [ CHANGELOG.md] ( CHANGELOG.md ) )
15
+ ** Current Spec version:** ` v.0.4.0 ` (see [ CHANGELOG.md] ( CHANGELOG.md ) )
16
16
17
17
## Table of Contents
18
18
@@ -224,10 +224,10 @@ as denoted by her WebID URI, `https://alice.databox.me/profile/card#me`.
224
224
225
225
### Groups of Agents
226
226
227
- To give access to a group of agents, use the ` acl:agentClass ` predicate.
228
- The object of an ` agentClass ` statement is a hash fragment identifier that
229
- resolves to an RDF class statement in a ** Group Listing ** document.
230
- If a WebID is listed in that document, * and * it's of the specified class , it is
227
+ To give access to a group of agents, use the ` acl:agentGroup ` predicate.
228
+ The object of an ` agentGroup ` statement is a link to a ** Group Listing **
229
+ document. The WebIDs of group members are listed in it, using the
230
+ ` vcard:hasMember ` predicate. If a WebID is listed in that document, it is
231
231
given access.
232
232
233
233
Example ACL resource, ` shared-file1.acl ` , containing a group permission:
@@ -249,32 +249,40 @@ Example ACL resource, `shared-file1.acl`, containing a group permission:
249
249
a acl:Authorization;
250
250
acl:accessTo <https://alice.example.com/docs/shared-file1>;
251
251
acl:mode acl:Read, acl:Write;
252
- acl:agentClass <https://alice.example.com/work-groups#Accounting>;
253
- acl:agentClass <https://alice.example.com/work-groups#Management>.
252
+ acl:agentGroup <https://alice.example.com/work-groups#Accounting>;
253
+ acl:agentGroup <https://alice.example.com/work-groups#Management>.
254
254
```
255
255
256
256
Corresponding ` work-groups ` Group Listing document:
257
257
258
258
``` ttl
259
259
# Contents of https://alice.example.com/work-groups
260
260
@prefix acl: <http://www.w3.org/ns/auth/acl#>.
261
- @prefix rdfs : <http://www.w3.org/2000/01/rdf-schema#> .
261
+ @prefix vcard : <http://www.w3.org/2006/vcard/ns#> .
262
262
263
263
<> a acl:GroupListing.
264
264
265
- <#Employee> a rdfs:Class.
266
- <#Accounting> a rdfs:Class.
267
- <#Management> a rdfs:Class.
265
+ <#Accounting>
266
+ a vcard:Group;
267
+ vcard:hasUID <urn:uuid:8831CBAD-1111-2222-8563-F0F4787E5398:ABGroup>;
268
+ dc:created "2013-09-11T07:18:19+0000"^^xsd:dateTime;
269
+ dc:modified "2015-08-08T14:45:15+0000"^^xsd:dateTime;
268
270
269
- <https://bob.example.com/profile/card#me> a <#Employee>, <#Accounting>.
270
- <https://candice.example.com/profile/card#me> a <#Employee>, <#Accounting>.
271
+ # Accounting group members:
272
+ vcard:hasMember <https://bob.example.com/profile/card#me>;
273
+ vcard:hasMember <https://candice.example.com/profile/card#me>.
271
274
272
- <https://deb.example.com/profile/card#me> a <#Employee>, <#Management>.
275
+ <#Management>
276
+ a vcard:Group;
277
+ vcard:hasUID <urn:uuid:8831CBAD-3333-4444-8563-F0F4787E5398:ABGroup>;
278
+
279
+ # Management group members:
280
+ vcard:hasMember <https://deb.example.com/profile/card#me>.
273
281
```
274
282
275
283
#### Group Listings - Implementation Notes
276
284
277
- When implementing support for ` acl:agentClass ` and Group Listings, keep in mind
285
+ When implementing support for ` acl:agentGroup ` and Group Listings, keep in mind
278
286
the following issues:
279
287
280
288
1 . Group Listings are regular documents (potentially with their own ` .acl ` s).
@@ -285,7 +293,7 @@ the following issues:
285
293
286
294
##### Group Listings - Authentication of External Requests
287
295
288
- Group Listings via ` acl:agentClass ` links introduce the possibility of an ACL
296
+ Group Listings via ` acl:agentGroup ` links introduce the possibility of an ACL
289
297
checking engine having to make requests to other servers. Given that access to
290
298
those external group listings can be protected, the question immediately arises:
291
299
By what mechanism should the ACL checking engine authenticate its request to
@@ -327,7 +335,7 @@ examples.
327
335
##### Infinite Request Loops in Group Listings
328
336
329
337
Since Group Listings (which are linked to from ACL resources using
330
- the ` acl:agentClass ` predicate) are regular documents, they can have their very
338
+ the ` acl:agentGroup ` predicate) are regular documents, they can have their very
331
339
own ` .acl ` resources that restrict which users (or groups) are allowed to access
332
340
or change them. This fact, that ` .acl ` s point to Group Listings, which can have
333
341
` .acl ` s of their own, which can potentially also point to Group Listings, and so
@@ -340,15 +348,15 @@ https://a.com https://b.com
340
348
------------- GET ---------------
341
349
group-listA <------ group-listB.acl
342
350
| ^ contains:
343
- | | agentClass <a.com/group-ListA>
351
+ | | agentGroup <a.com/group-ListA>
344
352
v GET |
345
353
group-listA.acl ------> group-listB
346
354
contains:
347
- agentClass <b.com/group-listB>
355
+ agentGroup <b.com/group-listB>
348
356
```
349
357
350
358
The access to ` group-listA ` is controlled by ` group-listA.acl ` . So far so good.
351
- But if ` group-listA.acl ` contains any ` acl:agentClass ` references to * another*
359
+ But if ` group-listA.acl ` contains any ` acl:agentGroup ` references to * another*
352
360
group listing (say, points to ` group-listB ` ), one runs into potential danger.
353
361
In order to retrieve that other group listing, the ACL-checking engine on
354
362
` https://b.com ` will need to check the rules in ` group-listB.acl ` . And if
@@ -361,7 +369,7 @@ To guard against these loops, implementers have several options:
361
369
** A) Do not allow cross-domain Group Listing resolutions** .
362
370
The simplest to implement (but also the most limited) option is to disallow
363
371
cross-domain Group Listings resolution requests. That is, the ACL-checking code
364
- could detect ` agentClass ` links pointing to external servers during ACL
372
+ could detect ` agentGroup ` links pointing to external servers during ACL
365
373
resolution time, and treat those uniformly (as errors, or as automatic "access
366
374
denied").
367
375
0 commit comments