@@ -200,14 +200,15 @@ and Control) to one of her web resources, located at
200
200
201
201
``` ttl
202
202
# Contents of https://alice.databox.me/docs/file1.acl
203
- @prefix acl: <http://www.w3.org/ns/auth/acl#>.
203
+ @prefix acl: <http://www.w3.org/ns/auth/acl#> .
204
204
205
205
<#authorization1>
206
- a acl:Authorization;
207
- acl:agent <https://alice.databox.me/profile/card#me>; # Alice's WebID
208
- acl:accessTo <https://alice.databox.me/docs/file1>;
209
- acl:mode
210
- acl:Read, acl:Write, acl:Control.
206
+ a acl:Authorization;
207
+ acl:agent <https://alice.databox.me/profile/card#me>; # Alice's WebID
208
+ acl:accessTo <https://alice.databox.me/docs/file1>;
209
+ acl:mode acl:Read,
210
+ acl:Write,
211
+ acl:Control.
211
212
```
212
213
213
214
## Describing Agents
@@ -236,58 +237,61 @@ Example ACL resource, `shared-file1.acl`, containing a group permission:
236
237
237
238
``` ttl
238
239
# Contents of https://alice.databox.me/docs/shared-file1.acl
239
- @prefix acl: <http://www.w3.org/ns/auth/acl#>.
240
+ @prefix acl: <http://www.w3.org/ns/auth/acl#>.
240
241
241
242
# Individual authorization - Alice has Read/Write/Control access
242
243
<#authorization1>
243
- a acl:Authorization;
244
- acl:accessTo <https://alice.example.com/docs/shared-file1>;
245
- acl:mode acl:Read, acl:Write, acl:Control;
246
- acl:agent <https://alice.example.com/profile/card#me>.
244
+ a acl:Authorization;
245
+ acl:accessTo <https://alice.example.com/docs/shared-file1>;
246
+ acl:mode acl:Read,
247
+ acl:Write,
248
+ acl:Control;
249
+ acl:agent <https://alice.example.com/profile/card#me>.
247
250
248
251
# Group authorization, giving Read/Write access to two groups, which are
249
252
# specified in the 'work-groups' document.
250
253
<#authorization2>
251
- a acl:Authorization;
252
- acl:accessTo <https://alice.example.com/docs/shared-file1>;
253
- acl:mode acl:Read, acl:Write;
254
- acl:agentGroup <https://alice.example.com/work-groups#Accounting>;
255
- acl:agentGroup <https://alice.example.com/work-groups#Management>.
254
+ a acl:Authorization;
255
+ acl:accessTo <https://alice.example.com/docs/shared-file1>;
256
+ acl:mode acl:Read,
257
+ acl:Write;
258
+ acl:agentGroup <https://alice.example.com/work-groups#Accounting>;
259
+ acl:agentGroup <https://alice.example.com/work-groups#Management>.
256
260
```
257
261
258
262
Corresponding ` work-groups ` Group Listing document:
259
263
260
264
``` ttl
261
265
# Contents of https://alice.example.com/work-groups
262
- @prefix acl: <http://www.w3.org/ns/auth/acl#>.
263
- @prefix vcard: <http://www.w3.org/2006/vcard/ns#> .
266
+ @prefix acl: <http://www.w3.org/ns/auth/acl#>.
267
+ @prefix vcard: <http://www.w3.org/2006/vcard/ns#>.
264
268
265
- <> a acl:GroupListing.
269
+ <> a acl:GroupListing.
266
270
267
271
<#Accounting>
268
- a vcard:Group;
269
- vcard:hasUID <urn:uuid:8831CBAD-1111-2222-8563-F0F4787E5398:ABGroup>;
270
- dc:created "2013-09-11T07:18:19+0000"^^xsd:dateTime;
271
- dc:modified "2015-08-08T14:45:15+0000"^^xsd:dateTime;
272
+ a vcard:Group;
273
+ vcard:hasUID <urn:uuid:8831CBAD-1111-2222-8563-F0F4787E5398:ABGroup>;
274
+ dc:created "2013-09-11T07:18:19+0000"^^xsd:dateTime;
275
+ dc:modified "2015-08-08T14:45:15+0000"^^xsd:dateTime;
272
276
273
- # Accounting group members:
274
- vcard:hasMember <https://bob.example.com/profile/card#me>;
275
- vcard:hasMember <https://candice.example.com/profile/card#me>.
277
+ # Accounting group members:
278
+ vcard:hasMember <https://bob.example.com/profile/card#me>;
279
+ vcard:hasMember <https://candice.example.com/profile/card#me>.
276
280
277
281
<#Management>
278
- a vcard:Group;
279
- vcard:hasUID <urn:uuid:8831CBAD-3333-4444-8563-F0F4787E5398:ABGroup>;
282
+ a vcard:Group;
283
+ vcard:hasUID <urn:uuid:8831CBAD-3333-4444-8563-F0F4787E5398:ABGroup>;
280
284
281
- # Management group members:
282
- vcard:hasMember <https://deb.example.com/profile/card#me>.
285
+ # Management group members:
286
+ vcard:hasMember <https://deb.example.com/profile/card#me>.
283
287
```
284
288
285
289
#### Group Listings - Implementation Notes
286
290
287
291
When implementing support for ` acl:agentGroup ` and Group Listings, keep in mind
288
292
the following issues:
289
293
290
- 1 . Group Listings are regular documents (potentially with their own ` .acl ` s ).
294
+ 1 . Group Listings are regular documents (potentially each with its own ` .acl ` ).
291
295
2 . What authentication mechanism should the ACL checking engine use, when making
292
296
requests for Group Listing documents on other servers?
293
297
3 . Infinite request loops during ACL resolution become possible, if an ` .acl `
@@ -306,14 +310,14 @@ To specify that you're giving a particular mode of access to *everyone*
306
310
of * all* agents (the general public). For example:
307
311
308
312
``` ttl
309
- @prefix acl: <http://www.w3.org/ns/auth/acl#>.
310
- @prefix foaf: <http://xmlns.com/foaf/0.1/> .
313
+ @prefix acl: <http://www.w3.org/ns/auth/acl#>.
314
+ @prefix foaf: <http://xmlns.com/foaf/0.1/>.
311
315
312
316
<#authorization2>
313
- a acl:Authorization;
314
- acl:agentClass foaf:Agent; # everyone
315
- acl:mode acl:Read; # has Read-only access
316
- acl:accessTo <https://alice.databox.me/profile/card>. # to the public profile
317
+ a acl:Authorization;
318
+ acl:agentClass foaf:Agent; # everyone
319
+ acl:mode acl:Read; # has Read-only access
320
+ acl:accessTo <https://alice.databox.me/profile/card>. # to the public profile
317
321
```
318
322
319
323
Note that this is a special case of ` acl:agentClass ` usage, since it doesn't
@@ -333,14 +337,14 @@ you can use
333
337
of * all* authenticated agents. For example:
334
338
335
339
``` ttl
336
- @prefix acl: <http://www.w3.org/ns/auth/acl#>.
337
- @prefix foaf: <http://xmlns.com/foaf/0.1/> .
340
+ @prefix acl: <http://www.w3.org/ns/auth/acl#>.
341
+ @prefix foaf: <http://xmlns.com/foaf/0.1/>.
338
342
339
343
<#authorization2>
340
- a acl:Authorization;
341
- acl:agentClass acl:AuthenticatedAgent; # everyone
342
- acl:mode acl:Read; # has Read-only access
343
- acl:accessTo <https://alice.databox.me/profile/card>. # to the public profile
344
+ a acl:Authorization;
345
+ acl:agentClass acl:AuthenticatedAgent; # everyone
346
+ acl:mode acl:Read; # has Read-only access
347
+ acl:accessTo <https://alice.databox.me/profile/card>. # to the public profile
344
348
```
345
349
346
350
Note that this is a special case of ` acl:agentClass ` usage, since it doesn't
@@ -400,8 +404,13 @@ In solid a maxim is, you have complete control of he data. Therefore it is up to
400
404
- A writer could give in their profile a statement that they will allow readers to use a given app.
401
405
402
406
```
403
- <#me> acl:trustedApp [acl:origin <https://calendar.example.com>; acl:mode acl:Read , acl:Append].
404
- <#me> acl:trustedApp [acl:origin <https://contacts.example.com>; acl:mode acl:Read , acl:Write, acl:Control] .
407
+ <#me> acl:trustedApp [ acl:origin <https://calendar.example.com>;
408
+ acl:mode acl:Read,
409
+ acl:Append].
410
+ <#me> acl:trustedApp [ acl:origin <https://contacts.example.com>;
411
+ acl:mode acl:Read,
412
+ acl:Write,
413
+ acl:Control].
405
414
```
406
415
407
416
We define the owners of the resource as people given explicit Control access to it.
@@ -411,14 +420,15 @@ For each owner x, the server looks up the (extended?) profile, and looks in it f
411
420
triple of the form
412
421
413
422
```
414
- ?x acl:trustedApp ?y .
423
+ ?x acl:trustedApp ?y .
415
424
```
416
425
The set of trust objects is the accumulated set of ?y found in this way.
417
426
418
427
For the app ?z to have access, for every mode of access ?m required
419
428
there must be some trust object ?y such that
420
429
```
421
- ?y acl:origin ?z ; acl:mode ?m .
430
+ ?y acl:origin ?z;
431
+ acl:mode ?m.
422
432
```
423
433
Note access to different modes may be given in the same or different trust objects.
424
434
@@ -490,21 +500,22 @@ An example ACL for a container would look something like:
490
500
491
501
``` ttl
492
502
# Contents of https://alice.databox.me/docs/.acl
493
- @prefix acl: <http://www.w3.org/ns/auth/acl#>.
503
+ @prefix acl: <http://www.w3.org/ns/auth/acl#>.
494
504
495
505
<#authorization1>
496
- a acl:Authorization;
506
+ a acl:Authorization;
497
507
498
508
# These statements specify access rules for the /docs/ container itself:
499
- acl:agent <https://alice.databox.me/profile/card#me>;
500
- acl:accessTo <https://alice.databox.me/docs/>;
501
- acl:mode
502
- acl:Read, acl:Write, acl:Control;
503
-
504
- # defaultForNew says: this authorization (the statements above) will also
505
- # be inherited by any resource within that container that doesn't have its
506
- # own ACL.
507
- acl:defaultForNew <https://alice.databox.me/docs/>.
509
+ acl:agent <https://alice.databox.me/profile/card#me>;
510
+ acl:accessTo <https://alice.databox.me/docs/>;
511
+ acl:mode acl:Read,
512
+ acl:Write,
513
+ acl:Control;
514
+
515
+ # defaultForNew says: this authorization (the statements above)
516
+ # will also be inherited by any resource within that container
517
+ # that doesn't have its own ACL.
518
+ acl:defaultForNew <https://alice.databox.me/docs/>.
508
519
```
509
520
510
521
** Note:** The ` acl:defaultForNew ` predicate will soon be renamed to
@@ -546,9 +557,9 @@ need to be public-readable. THIS IS THE ONLY METHOD CURRENTLY IN USE
546
557
** WebID-TLS Delegation** . If your implementation uses the WebID-TLS
547
558
authentication method, it also needs to implement the ability to delegate its
548
559
requests on behalf of the original user.
549
- (No, the original requester may not be akllowed access -- you don't have to ableForto
560
+ (No, the original requester may not be allowed access -- you don't have to able to
550
561
access a group to be in it)
551
- a discussion of such a capability,
562
+ For a discussion of such a capability,
552
563
see the [ Extending the WebID Protocol with Access
553
564
Delegation] ( http://bblfish.net/tmp/2012/08/05/WebID_Delegation.pdf ) paper.
554
565
One thing to keep in mind is - if there are several hops (an ACL request chain
@@ -640,8 +651,13 @@ guard against. In either case, the consequences are not disastrous.
640
651
- A reader can ask to use a given app, by publishing the fact that she trusts a given app.
641
652
642
653
```
643
- <#me> acl:trustsForUse [acl:origin <https://calendar.example.com> acl:mode acl:Read , acl:Append].
644
- <#me> acl:trustsForUse [acl:origin <https://contacts.example.com> acl:mode acl:Read , acl:Write, acl:Control] .
654
+ <#me> acl:trustsForUse [ acl:origin <https://calendar.example.com>;
655
+ acl:mode acl:Read,
656
+ acl:Append].
657
+ <#me> acl:trustsForUse [ acl:origin <https://contacts.example.com>;
658
+ acl:mode acl:Read,
659
+ acl:Write,
660
+ acl:Control].
645
661
```
646
662
647
663
A writer could have also more sophisticated requirements, such as that any app Alice
0 commit comments