File System ACLs are compatible with the following standard:
File System ACLs are stored on the file system and they control REST API access.
ACLs MUST either be stored in the OCFL storage root directory or in an OCFL object directory. ACLs MUST be stored in
a file named acl.json
. The OCFL storage root ACL ist the default ACL for all OCFL objects. OCFL object
ACLs overwrite the default OCFL storage root ACL.
Default ACL. Affects all OCFL content files of all OCFL versions of all OCFL objects of a repository.
[root]
└── {repository}
└── data
├── 0=ocfl_1.0
├── acl.json
├── ...
Affects all OCFL content files of all OCFL versions of an OCFL object. Overwrites the default ACL.
[root] └── {repository} └── data └── collection └── bundle ├── 0=ocfl_object_1.0 ├── acl.json ├── ... ├── v1 │ └── content │ ├── file1.txt │ ├── file2.txt │ ├── ... ├── v2 │ └── content │ ├── file3.jpg │ ├── ...
The following APIs are ACL controlled:
Other APIs are public or have role based control, see Authorization.
An Access Control Entry (ACE) specifies which user(s) aka which "acl:agent
s" are granted access to a
resource, as well as what operations are allowed on a resource.
Property | Description | Value | Implementation |
---|---|---|---|
agent* | The acl:agent predicate denotes the unique name of a singular user. |
string |
The {username} according to
eduPersonPrincipalName
. |
agentClass* | The acl:agentClass predicate denotes access for two classes of users: (1) everyone or (2)
authenticated users. |
One of foaf:Agent , acl:AuthenticatedAgent . |
|
mode** | The acl:mode predicate denotes a class of operations that the user(s) can perform on a
resource. |
Set of acl:Read , acl:Write , acl:Append , acl:Control . |
Currently, only acl:Read is in use. |
agent
and agentClass
are alternatives, where one is required.mode
must be a non-empty set.{ "agentClass": "acl:AuthenticatedAgent", "mode": ["acl:Read"] }
An ACL is a list of 0 to n ACEs.
ACEs in an ACL behave additive. The example below means "read access is granted to user@example.com and to the class of authenticated users and to the class of every user.
[ { "agent": "user@example.com", "mode": ["acl:Read"] }, { "agentClass": "acl:AuthenticatedAgent", "mode": ["acl:Read"] }, { "agentClass": "foaf:Agent", "mode": ["acl:Read"] } ]
Since the class of authenticated users is a subset of "every user" and one singular user is contained in the class of authenticated users, the example is equivalent to:
[ { "agentClass": "foaf:Agent", "mode": ["acl:Read"] } ]
"no-one has access"
[]
Embargo is the default access level if no acl.json
file is available.
"a list of singular users have access"
[ { "agent": "gtest@uni-koeln.de", "mode": ["acl:Read"] }, { "agent": "user@example.com", "mode": ["acl:Read"] } ]
"every registered user that is logged in has access"
[ { "agentClass": "acl:AuthenticatedAgent", "mode": ["acl:Read"] } ]
"everyone has access"
[ { "agentClass": "foaf:Agent", "mode": ["acl:Read"] } ]