incubator-sling-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache Sling > Supporting CRUD
Date Tue, 15 May 2012 07:28:00 GMT
<html>
<head>
    <base href="https://cwiki.apache.org/confluence">
            <link rel="stylesheet" href="/confluence/s/2042/9/1/_/styles/combined.css?spaceKey=SLING&amp;forWysiwyg=true"
type="text/css">
    </head>
<body style="background: white;" bgcolor="white" class="email-body">
<div id="pageContent">
<div id="notificationFormat">
<div class="wiki-content">
<div class="email">
    <h2><a href="https://cwiki.apache.org/confluence/display/SLING/Supporting+CRUD">Supporting
CRUD</a></h2>
    <h4>Page <b>edited</b> by             <a href="https://cwiki.apache.org/confluence/display/~cziegeler@apache.org">Carsten
Ziegeler</a>
    </h4>
        <br/>
                         <h4>Changes (2)</h4>
                                 
    
<div id="page-diffs">
                    <table class="diff" cellpadding="0" cellspacing="0">
    
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" >h3. Create <br> <br></td></tr>
            <tr><td class="diff-changed-lines" >We add a new method _create(String
absolutePath, ValueMap properties)_ to the resource resolver, <span class="diff-changed-words">w<span
class="diff-added-chars"style="background-color: #dfd;">h</span>e<span class="diff-added-chars"style="background-color:
#dfd;">re</span></span> the value map is optional. This will create the resource
at the given path and add the provided properties. The change is persisted immediately (see
below) <br></td></tr>
            <tr><td class="diff-unchanged" >In the case of a JCR backed repository,
the properties might contain _jcr:primaryType_ and _jcr:mixins_ - which are used to set the
node node and mixins. Otherwise the defaults apply. <br> <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" > <br>TBD Transaction handling
<br></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">
<br>h2. Resource Providers <br> <br>A resource provider is mounted into
the resource tree. In general, the providers are processed ordered by service ranking, highest
first. A service provider gets a service property specifying the sub tree it is claiming to
use. For example, a service provider might be mounted at /a/some/path. Everything below this
path is processed by this resource resolver. However another resource provider might claim
/a/some/path/and/down. So the longest matching path wins. <br> <br>h3. Access
Control <br> <br>It&#39;s the task of a resource resolver to check if the
current user is able/allowed to access a resource. If this is not possible, the corresponding
action is denied. <br>As resource providers are mounted at a path (see above), the resource
resolver delegates to a resource provider for a given path. If the user is not allowed to
perform the action, the processing is stopped. There is no fallback to another resource provider.
This avoids the problem that different users might see different resources (provided by different
providers) depending on their rights. <br></td></tr>
    
            </table>
    </div>                            <h4>Full Content</h4>
                    <div class="notificationGreySide">
        <p>The current Sling resource API only allows reading of resources - with the
PersistableValueMap we have a simple mechanism to support updates, however this approach comes
with some problems (see below).</p>

<p>This is a concept how to fully implement CRUD via the resource API. As a first step
we angle the problem from the users via: the API to be used by Sling applications.</p>

<h2><a name="SupportingCRUD-UserAPI"></a>User API</h2>

<h3><a name="SupportingCRUD-Read"></a>Read</h3>

<p>The support for read is sufficient, we don't need to change that much.</p>

<h3><a name="SupportingCRUD-Delete"></a>Delete</h3>

<p>We add a <em>delete</em> method to the <b>Resource</b> interface,
so deleting a resource is a two way step: first getting the resource from the resource resolver
and then deleting it. The change is persisted immediately (see below).</p>

<h3><a name="SupportingCRUD-Create"></a>Create</h3>

<p>We add a new method <em>create(String absolutePath, ValueMap properties)</em>
to the resource resolver, where the value map is optional. This will create the resource at
the given path and add the provided properties. The change is persisted immediately (see below)<br/>
In the case of a JCR backed repository, the properties might contain <em>jcr:primaryType</em>
and <em>jcr:mixins</em> - which are used to set the node node and mixins. Otherwise
the defaults apply.</p>

<h3><a name="SupportingCRUD-Update"></a>Update</h3>

<p>TBD</p>

<h3><a name="SupportingCRUD-PersistingChanges"></a>Persisting Changes</h3>

<p>In general, a call to one of the methods, modifying a resource as outlined are persisted
immediately. However, transactions will be supported as well.</p>

<p>TBD Transaction handling</p>

<h2><a name="SupportingCRUD-ResourceProviders"></a>Resource Providers</h2>

<p>A resource provider is mounted into the resource tree. In general, the providers
are processed ordered by service ranking, highest first. A service provider gets a service
property specifying the sub tree it is claiming to use. For example, a service provider might
be mounted at /a/some/path. Everything below this path is processed by this resource resolver.
However another resource provider might claim /a/some/path/and/down. So the longest matching
path wins.</p>

<h3><a name="SupportingCRUD-AccessControl"></a>Access Control</h3>

<p>It's the task of a resource resolver to check if the current user is able/allowed
to access a resource. If this is not possible, the corresponding action is denied.<br/>
As resource providers are mounted at a path (see above), the resource resolver delegates to
a resource provider for a given path. If the user is not allowed to perform the action, the
processing is stopped. There is no fallback to another resource provider. This avoids the
problem that different users might see different resources (provided by different providers)
depending on their rights.</p>
    </div>
        <div id="commentsSection" class="wiki-content pageSection">
        <div style="float: right;">
            <a href="https://cwiki.apache.org/confluence/users/viewnotifications.action"
class="grey">Change Notification Preferences</a>
        </div>
        <a href="https://cwiki.apache.org/confluence/display/SLING/Supporting+CRUD">View
Online</a>
        |
        <a href="https://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=27844051&revisedVersion=2&originalVersion=1">View
Changes</a>
                |
        <a href="https://cwiki.apache.org/confluence/display/SLING/Supporting+CRUD?showComments=true&amp;showCommentArea=true#addcomment">Add
Comment</a>
            </div>
</div>
</div>
</div>
</div>
</body>
</html>

Mime
View raw message