Sorting inherited permissions for tables
This commit is contained in:
parent
7ad288dd1f
commit
060c133588
2 changed files with 286 additions and 145 deletions
|
|
@ -14,10 +14,14 @@
|
|||
(ii) every form, page or list has properties='listed'; where the supplied
|
||||
ADL had properties='all' or properties='user-distinct' the correct fields
|
||||
are generated.
|
||||
(iii) TODO: all permissions are fully specified down to field level, by
|
||||
inheriting where necessary. For every group specified in the ADL, for
|
||||
every entity, form, page, list or field, the canonical form should
|
||||
explicitly state the permission, even if it is 'none'.
|
||||
|
||||
$Author: sb $
|
||||
$Revision: 1.5 $
|
||||
$Date: 2008-02-07 17:45:32 $
|
||||
$Revision: 1.6 $
|
||||
$Date: 2008-02-08 13:48:54 $
|
||||
-->
|
||||
|
||||
<xsl:stylesheet version="1.0"
|
||||
|
|
@ -47,7 +51,7 @@
|
|||
* THIS FILE IS AUTOMATICALLY GENERATED AND SHOULD NOT
|
||||
* BE MANUALLY EDITED.
|
||||
*
|
||||
* Generated using adl2canonical.xsl revision <xsl:value-of select="substring('$Revision: 1.5 $', 12)"/>
|
||||
* Generated using adl2canonical.xsl revision <xsl:value-of select="substring('$Revision: 1.6 $', 12)"/>
|
||||
*
|
||||
***************************************************************************
|
||||
</xsl:comment>
|
||||
|
|
@ -81,11 +85,21 @@
|
|||
<xsl:apply-templates select="adl:key/adl:property"/>
|
||||
</key>
|
||||
<xsl:apply-templates select="adl:property[not(@name=$nkey)] | adl:one-to-many | adl:many-to-many | adl:many-to-one"/>
|
||||
<xsl:apply-templates select="adl:permission"/>
|
||||
|
||||
<xsl:variable name="entity" select="."/>
|
||||
<xsl:for-each select="//adl:group">
|
||||
<xsl:call-template name="entity-group-permission">
|
||||
<xsl:with-param name="entity" select="$entity"/>
|
||||
<xsl:with-param name="group" select="."/>
|
||||
<xsl:with-param name="descendantname" select="@name"/>
|
||||
</xsl:call-template>
|
||||
</xsl:for-each>
|
||||
|
||||
<xsl:apply-templates select="adl:form | adl:page | adl:list"/>
|
||||
</entity>
|
||||
</xsl:template>
|
||||
|
||||
|
||||
|
||||
<!-- an entity which has no explicit key: auto-generate one -->
|
||||
<xsl:template match="adl:entity">
|
||||
<xsl:comment>
|
||||
|
|
@ -140,7 +154,16 @@
|
|||
</property>
|
||||
</key>
|
||||
<xsl:apply-templates select="adl:property | adl:one-to-many | adl:many-to-many | adl:many-to-one"/>
|
||||
<xsl:apply-templates select="adl:permission"/>
|
||||
|
||||
<xsl:variable name="entity" select="."/>
|
||||
<xsl:for-each select="//adl:group">
|
||||
<xsl:call-template name="entity-group-permission">
|
||||
<xsl:with-param name="entity" select="$entity"/>
|
||||
<xsl:with-param name="group" select="."/>
|
||||
<xsl:with-param name="descendantname" select="@name"/>
|
||||
</xsl:call-template>
|
||||
</xsl:for-each>
|
||||
|
||||
<xsl:apply-templates select="adl:form | adl:page | adl:list"/>
|
||||
</entity>
|
||||
</xsl:template>
|
||||
|
|
@ -245,35 +268,6 @@
|
|||
</list>
|
||||
</xsl:template>
|
||||
|
||||
<!-- unroll all the explicit properties in the ancestor entity of
|
||||
the context (assumed to be form, page or list) into a list of fields -->
|
||||
<xsl:template name="unroll-properties">
|
||||
<xsl:for-each select="ancestor::adl:entity/descendant::adl:property |
|
||||
ancestor::adl:entity/descendant::adl:one-to-many |
|
||||
ancestor::adl:entity/descendant::adl:many-to-many |
|
||||
ancestor::adl:entity/descendant::adl:many-to-one">
|
||||
<field>
|
||||
<xsl:attribute name="property">
|
||||
<xsl:value-of select="@name"/>
|
||||
</xsl:attribute>
|
||||
</field>
|
||||
</xsl:for-each>
|
||||
</xsl:template>
|
||||
|
||||
<!-- unroll all the user-distinct properties in the ancestor entity of
|
||||
the context (assumed to be form, page or list) into a list of fields.
|
||||
NOTE that n-to-n properties cannot currently be user-distinct and are
|
||||
therefore not inspected -->
|
||||
<xsl:template name="unroll-user-distinct">
|
||||
<xsl:for-each select="ancestor::adl:entity/descendant::adl:property[@distinct='user']">
|
||||
<field>
|
||||
<xsl:attribute name="property">
|
||||
<xsl:value-of select="@name"/>
|
||||
</xsl:attribute>
|
||||
</field>
|
||||
</xsl:for-each>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="adl:typedef[ @type = 'string' and not( @size)]">
|
||||
<xsl:message terminate="yes">
|
||||
ADL ERROR: Type definitions of type 'string' must have a valid value for 'size'
|
||||
|
|
@ -311,4 +305,82 @@
|
|||
</xsl:copy>
|
||||
</xsl:template>
|
||||
|
||||
<!-- generate a permission element for this group and this entity -->
|
||||
<xsl:template name="entity-group-permission">
|
||||
<xsl:param name="entity"/>
|
||||
<xsl:param name="group"/>
|
||||
<xsl:param name="descendantname"/>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$entity/adl:permission[@group=$group/@name]">
|
||||
<!-- there's an explicit permission for this group -->
|
||||
<permission>
|
||||
<xsl:attribute name="group">
|
||||
<xsl:value-of select="$descendantname"/>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="permission">
|
||||
<xsl:value-of select="$entity/adl:permission[@group=$group/@name]/@permission"/>
|
||||
</xsl:attribute>
|
||||
</permission>
|
||||
</xsl:when>
|
||||
<xsl:when test="$group/@parent">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$group/@parent = $group/@name">
|
||||
<xsl:message terminate="yes">
|
||||
ADL: ERROR: A group may not be its own parent; offending group <xsl:value-of select="$group/@name"/>
|
||||
</xsl:message>
|
||||
</xsl:when>
|
||||
<xsl:when test="//adl:group[@name=$group/@parent]">
|
||||
<xsl:call-template name="entity-group-permission">
|
||||
<xsl:with-param name="entity" select="$entity"/>
|
||||
<xsl:with-param name="group" select="//adl:group[@name=$group/@parent]"/>
|
||||
<xsl:with-param name="descendantname" select="$descendantname"/>
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:message terminate="yes">
|
||||
ADL: ERROR: Group specified (<xsl:value-of select="$group/@parent"/> does not exist.
|
||||
</xsl:message>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<permission permission="none">
|
||||
<xsl:attribute name="group">
|
||||
<xsl:value-of select="$descendantname"/>
|
||||
</xsl:attribute>
|
||||
</permission>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<!-- unroll all the explicit properties in the ancestor entity of
|
||||
the context (assumed to be form, page or list) into a list of fields -->
|
||||
<xsl:template name="unroll-properties">
|
||||
<xsl:for-each select="ancestor::adl:entity/descendant::adl:property |
|
||||
ancestor::adl:entity/descendant::adl:one-to-many |
|
||||
ancestor::adl:entity/descendant::adl:many-to-many |
|
||||
ancestor::adl:entity/descendant::adl:many-to-one">
|
||||
<field>
|
||||
<xsl:attribute name="property">
|
||||
<xsl:value-of select="@name"/>
|
||||
</xsl:attribute>
|
||||
</field>
|
||||
</xsl:for-each>
|
||||
</xsl:template>
|
||||
|
||||
<!-- unroll all the user-distinct properties in the ancestor entity of
|
||||
the context (assumed to be form, page or list) into a list of fields.
|
||||
NOTE that n-to-n properties cannot currently be user-distinct and are
|
||||
therefore not inspected -->
|
||||
<xsl:template name="unroll-user-distinct">
|
||||
<xsl:for-each select="ancestor::adl:entity/descendant::adl:property[@distinct='user']">
|
||||
<field>
|
||||
<xsl:attribute name="property">
|
||||
<xsl:value-of select="@name"/>
|
||||
</xsl:attribute>
|
||||
</field>
|
||||
</xsl:for-each>
|
||||
</xsl:template>
|
||||
|
||||
|
||||
</xsl:stylesheet>
|
||||
Loading…
Add table
Add a link
Reference in a new issue