<https://docs.linkeddatahub.com/reference/administration/acl/>
        a       <https://w3id.org/atomgraph/linkeddatahub/document-hierarchy#Item>;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#_1>
                <https://docs.linkeddatahub.com/reference/administration/acl/#content>;
        <http://purl.org/dc/terms/created>
                "2026-10-25T17:34:36.164Z"^^<http://www.w3.org/2001/XMLSchema#dateTime>;
        <http://purl.org/dc/terms/creator>
                <https://admin.linkeddatahub.com/acl/agents/01fe43e2-f80e-4312-b37e-86063a80e4f9/#this>;
        <http://purl.org/dc/terms/description>
                "Agents, groups, and authorizations";
        <http://purl.org/dc/terms/modified>
                "2026-10-27T12:17:03.314Z"^^<http://www.w3.org/2001/XMLSchema#dateTime>;
        <http://purl.org/dc/terms/title>
                "Access control";
        <http://rdfs.org/sioc/ns#has_container>
                <https://docs.linkeddatahub.com/reference/administration/>;
        <http://www.w3.org/ns/auth/acl#owner>
                <https://admin.linkeddatahub.com/acl/agents/01fe43e2-f80e-4312-b37e-86063a80e4f9/#this> .

<https://docs.linkeddatahub.com/reference/administration/acl/#content>
        a       <https://w3id.org/atomgraph/linkeddatahub#XHTML>;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#value>
                "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n    <p class=\"ldh-body-lg\">Agents, groups, and authorizations</p>\n    <p>LinkedDataHub access control is based on the W3C <a href=\"https://www.w3.org/wiki/WebAccessControl\" target=\"_blank\">ACL ontology</a>.</p>\n    <div>\n        <h2 id=\"access-modes\">Access modes</h2>\n        <p>There are three access modes (classes of operation) that map to <a href=\"../../http-api/documents/#methods\">HTTP methods</a>:</p>\n        <table>\n            <caption class=\"ac-vh\">Access modes and the HTTP methods they permit</caption>\n            <thead>\n                <tr>\n                    <th scope=\"col\">Mode</th>\n                    <th scope=\"col\">Permits</th>\n                    <th scope=\"col\">HTTP method</th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr>\n                    <th scope=\"row\">Read</th>\n                    <td>Read the contents, including querying them.</td>\n                    <td><code>GET</code></td>\n                </tr>\n                <tr>\n                    <th scope=\"row\">Write</th>\n                    <td>Overwrite the contents, including deleting or modifying them.</td>\n                    <td><code>PUT</code>, <code>PATCH</code>, <code>DELETE</code></td>\n                </tr>\n                <tr>\n                    <th scope=\"row\">Append</th>\n                    <td>Add information without removing or replacing any.</td>\n                    <td><code>POST</code></td>\n                </tr>\n            </tbody>\n        </table>\n        <p><code>acl:Control</code> grants nothing: authorizations are documents in the <a href=\"../../dataspace/#admin\">administration dataspace</a>,\n            so changing them takes <code>acl:Write</code> there.</p>\n    </div>\n    <div>\n        <h2 id=\"agents\">Agents</h2>\n        <p>An agent is a person or a piece of software, identified by a WebID, that can be authorized to have certain <a href=\"#access-modes\">modes\n            of access</a> to certain dataspaces.</p>\n    </div>\n    <div>\n        <h2 id=\"groups\">Groups</h2>\n        <p>A group is a named group of <a href=\"#agents\">agents</a> to which an <a href=\"#authorizations\">authorization</a> can\n            be given. It is a subclass of the <a href=\"http://xmlns.com/foaf/spec/#term_Group\" target=\"_blank\"><code>foaf:Group</code></a>\n            class.</p>\n        <p>There are several default groups:</p>\n        <ul>\n            <li>Owners</li>\n            <li>Writers</li>\n            <li>Readers</li>\n        </ul>\n        <div class=\"ac-alert va-informative\" role=\"status\">\n            <span class=\"ac-alert-ic\"><span aria-hidden=\"true\" class=\"msi outline\">info</span></span>\n            <div class=\"ac-alert-body\">\n                <p class=\"ac-alert-text\">By default, only members of the owners group have access to the administration dataspace: its built-in\n                    <samp>Full control</samp> authorization grants them read, append and write access to the administration root and everything\n                    below it. See <a href=\"#authorizations\">Authorizations</a>.</p>\n                <p class=\"ac-alert-text\">Note that an agent being a member of one of the above groups does not automatically provide it with an\n                    authorization. A valid authorization for the whole group has to be present.</p>\n            </div>\n        </div>\n    </div>\n    <div>\n        <h2 id=\"authorizations\">Authorizations</h2>\n        <p>An authorization explicitly grants access for an <a href=\"#agents\">agent</a> or a <a href=\"#groups\">group</a>\n            of agents to a specific document (<code>acl:accessTo</code>), to every document below a container (<code>acl:default</code>),\n            or to the resources of a <a href=\"../ontologies/#classes\">class</a> (<code>acl:accessToClass</code>). Grants only add access:\n            no authorization overrides another.</p>\n        <p>An authorization counts only in its own document, the one whose <code>foaf:primaryTopic</code> it is, and a group's members count\n            only in the group's own document.</p>\n        <p>To use the <a href=\"../../dataspace/#admin\">administration dataspace</a>, an <a href=\"#agents\">agent</a> needs access to its\n            documents like to any others. By default the <a href=\"#groups\">owners group</a> has it.</p>\n        <p>The default authorizations for groups and their respective access modes:</p>\n        <table>\n            <caption class=\"ac-vh\">Default access for each group</caption>\n            <thead>\n                <tr>\n                    <th scope=\"col\">Group</th>\n                    <th scope=\"col\">Read access</th>\n                    <th scope=\"col\">Write/append access</th>\n                    <th scope=\"col\">Administration dataspace</th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr>\n                    <th rowspan=\"2\" scope=\"row\">Owners</th>\n                    <td rowspan=\"2\"><a href=\"#access-modes\">Read</a></td>\n                    <td><a href=\"#access-modes\">Write</a></td>\n                    <td rowspan=\"2\"><a href=\"#access-modes\">Read</a>, <a href=\"#access-modes\">Append</a>, <a href=\"#access-modes\">Write</a></td>\n                </tr>\n                <tr>\n                    <td><a href=\"#access-modes\">Append</a></td>\n                </tr>\n                <tr>\n                    <th rowspan=\"2\" scope=\"row\">Writers</th>\n                    <td rowspan=\"2\"><a href=\"#access-modes\">Read</a></td>\n                    <td><a href=\"#access-modes\">Write</a></td>\n                    <td rowspan=\"2\">—</td>\n                </tr>\n                <tr>\n                    <td><a href=\"#access-modes\">Append</a></td>\n                </tr>\n                <tr>\n                    <th scope=\"row\">Readers</th>\n                    <td><a href=\"#access-modes\">Read</a></td>\n                    <td>—</td>\n                    <td>—</td>\n                </tr>\n            </tbody>\n        </table>\n        <p>An authorization is a plain RDF resource. Granting the <samp>writers</samp> group full access to the Northwind orders container:</p>\n        <div class=\"ac-tabs or-horizontal\">\n            <div class=\"ac-tablist sz-md va-line\" role=\"tablist\">\n                <button aria-controls=\"rdf-pane\" aria-selected=\"true\" class=\"ac-tab is-on\" id=\"rdf-tab\" role=\"tab\" type=\"button\"><span class=\"ac-tab-lbl\">RDF</span></button>\n                <button aria-controls=\"command-line-interface-pane\" aria-selected=\"false\" class=\"ac-tab\" id=\"command-line-interface-tab\" role=\"tab\" type=\"button\"><span class=\"ac-tab-lbl\">Command line interface</span></button>\n            </div>\n            <div aria-labelledby=\"rdf-tab\" class=\"ac-tabpanel\" id=\"rdf-pane\" role=\"tabpanel\">\n                <pre>@prefix acl:  &lt;http://www.w3.org/ns/auth/acl#&gt; .\n@prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt; .\n\n&lt;#this&gt; a acl:Authorization ;\n    rdfs:label \"Order management\" ;\n    acl:agentGroup &lt;https://admin.localhost:4443/acl/groups/writers/#this&gt; ;\n    acl:mode acl:Read, acl:Append, acl:Write ;\n    acl:accessTo &lt;https://localhost:4443/orders/&gt; .</pre>\n            </div>\n            <div aria-labelledby=\"command-line-interface-tab\" class=\"ac-tabpanel\" hidden=\"hidden\" id=\"command-line-interface-pane\" role=\"tabpanel\">\n                <pre>ldh admin create authorization \\\n  --label \"Order management\" \\\n  --agent-group \"https://admin.localhost:4443/acl/groups/writers/#this\" \\\n  --to \"https://localhost:4443/orders/\" \\\n  --read --append --write</pre>\n            </div>\n        </div>\n        <p>An authorization can also reach every document below a container with <code>acl:default</code>. Granting the <samp>readers</samp> group read access to\n            the orders container and every order in it:</p>\n        <div class=\"ac-tabs or-horizontal\">\n            <div class=\"ac-tablist sz-md va-line\" role=\"tablist\">\n                <button aria-controls=\"default-rdf-pane\" aria-selected=\"true\" class=\"ac-tab is-on\" id=\"default-rdf-tab\" role=\"tab\" type=\"button\"><span class=\"ac-tab-lbl\">RDF</span></button>\n                <button aria-controls=\"default-command-line-interface-pane\" aria-selected=\"false\" class=\"ac-tab\" id=\"default-command-line-interface-tab\" role=\"tab\" type=\"button\"><span class=\"ac-tab-lbl\">Command line interface</span></button>\n            </div>\n            <div aria-labelledby=\"default-rdf-tab\" class=\"ac-tabpanel\" id=\"default-rdf-pane\" role=\"tabpanel\">\n                <pre>@prefix acl:  &lt;http://www.w3.org/ns/auth/acl#&gt; .\n@prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt; .\n\n&lt;#this&gt; a acl:Authorization ;\n    rdfs:label \"Order read access\" ;\n    acl:agentGroup &lt;https://admin.localhost:4443/acl/groups/readers/#this&gt; ;\n    acl:mode acl:Read ;\n    acl:accessTo &lt;https://localhost:4443/orders/&gt; ;\n    acl:default &lt;https://localhost:4443/orders/&gt; .</pre>\n            </div>\n            <div aria-labelledby=\"default-command-line-interface-tab\" class=\"ac-tabpanel\" hidden=\"hidden\" id=\"default-command-line-interface-pane\" role=\"tabpanel\">\n                <pre>ldh admin create authorization \\\n  --label \"Order read access\" \\\n  --agent-group \"https://admin.localhost:4443/acl/groups/readers/#this\" \\\n  --to \"https://localhost:4443/orders/\" \\\n  --default \"https://localhost:4443/orders/\" \\\n  --read</pre>\n            </div>\n        </div>\n        <p>A document is below a container when its own <code>sioc:has_parent</code> or <code>sioc:has_container</code> leads there. <code>acl:default</code> does\n            not cover the container itself, hence the <code>acl:accessTo</code> alongside it.</p>\n        <p><code>acl:accessToClass</code> grants access to the resources of a class, such as <code>nfo:FileDataObject</code> for file uploads. It refuses the\n            document classes (<code>def:Root</code>, <code>dh:Container</code>, <code>dh:Item</code>) and the classes above them: documents are granted through the\n            hierarchy.</p>\n        <p>A public-access authorization allows access for non-authenticated agents — the <a href=\"../../../tutorial/publish/\">Publish</a> stage of the\n            tutorial shows the one <samp>ldh admin make-public</samp> creates, granting <code>acl:Read</code> to the <code>foaf:Agent</code> class\n            on the root and every document below it.</p>\n        <div>\n            <h3 id=\"owners\">Document owners</h3>\n            <p>The agent that creates a document is its owner (<code>acl:owner</code>), and stays so for the life of the document. The built-in\n                <samp>Owner access</samp> authorization grants read, append and write access to the <code>lacl:OwnerAgent</code> class, which matches\n                the owners of the requested document, on the end-user root and every document below it.</p>\n        </div>\n        <div class=\"ac-alert va-informative\" role=\"status\">\n            <span class=\"ac-alert-ic\"><span aria-hidden=\"true\" class=\"msi outline\">info</span></span>\n            <div class=\"ac-alert-body\">\n                <p class=\"ac-alert-text\">The owner's and <a href=\"../../dataspace/#dataspaces\">secretary's</a> authorizations are stored under stable URIs (<samp>acl/authorizations/owner-webid/</samp> and <samp>acl/authorizations/secretary-webid/</samp>), so reloading the admin dataset does not create duplicates.</p>\n            </div>\n        </div>\n        <div>\n            <h3 id=\"auth-requests\">Access requests</h3>\n            <p>If access is denied due to missing authorization, the agent can ask for it by issuing a request to the dataspace's\n                <a href=\"#groups\">owners</a>. The request indicates the request URI and access mode in question.\n                The owners can then accept the request by creating an <a href=\"#authorizations\">authorization</a> with the provided information\n                (possibly extending the requested access to a <a href=\"#groups\">group</a> of agents or a <a href=\"../ontologies/#classes\">class of resources</a>),\n                or simply ignore it.</p>\n            <p>A request is data too — asking for write access to a Northwind order:</p>\n            <pre>@prefix lacl: &lt;https://w3id.org/atomgraph/linkeddatahub/admin/acl#&gt; .\n@prefix acl:  &lt;http://www.w3.org/ns/auth/acl#&gt; .\n\n&lt;#this&gt; a lacl:AuthorizationRequest ;\n    lacl:requestAgent &lt;https://localhost:4443/agents/jane/#this&gt; ;\n    lacl:requestMode acl:Write ;\n    lacl:requestAccessTo &lt;https://localhost:4443/orders/10248/&gt; .</pre>\n        </div>\n    </div>\n    <div>\n        <h2 id=\"management\">Management</h2>\n        <table>\n            <caption class=\"ac-vh\">Access control actions and their CLI commands</caption>\n            <thead>\n                <tr>\n                    <th scope=\"col\">Action</th>\n                    <th scope=\"col\">CLI command</th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr>\n                    <th scope=\"row\">Create group</th>\n                    <td><a href=\"../../command-line-interface/#commands\"><samp>ldh admin create group</samp></a></td>\n                </tr>\n                <tr>\n                    <th scope=\"row\">Create authorization</th>\n                    <td><a href=\"../../command-line-interface/#commands\"><samp>ldh admin create authorization</samp></a></td>\n                </tr>\n                <tr>\n                    <th scope=\"row\">Add agent to group</th>\n                    <td><a href=\"../../command-line-interface/#commands\"><samp>ldh admin add agent</samp></a></td>\n                </tr>\n                <tr>\n                    <th scope=\"row\">Make a document public</th>\n                    <td><a href=\"../../command-line-interface/#commands\"><samp>ldh admin make-public</samp></a></td>\n                </tr>\n            </tbody>\n        </table>\n    </div>\n    <p class=\"ldh-body-lg\">To request access to someone else's dataspace, see the <a href=\"../../../get-started/request-access/\">Request access</a> guide. To open your data to the public, follow the <a href=\"../../../tutorial/publish/\">Publish</a> stage of the tutorial.</p>\n</div>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> .
