In addition to specialized views for viewing and managing libraries and groups, the following methods, object properties, and operators in the Path Query Language can be used to view data related to library and access rights. This is useful for checking to ensure users have their needed access rights. 


Methods

  • Admins
  • AllUsers
  • GetUserAccess
  • Groups
  • Users
  • User


Object Properties

  • Owner (Valid for: item, issue, attachment, node, HomeLibrary)


Operators

  • in


Refer to the Path Query Language Reference Manual in the application Help for more details. 


This articles provides some examples for how to view library and access rights. 


Example Data


Configurable Graph

Configurable graphs can be used to visualize the data.


Example Configuration 

<Graph>
	<Options>
		<ObjIcons/>
	</Options>
	<NodeStyles>
		<NodeStyle name="Library" fillColor="#f9f5a4" fillColor2="#f9f5a4"/>
		<NodeStyle name="Group" fillColor="#508ee1" fillColor2="#ffffff"/>
		<NodeStyle name="GroupUsers">
			<Shape>
				<Actor lineColor="#3e58c2"/> 
			</Shape>
		</NodeStyle>
		<NodeStyle name="GroupAdmins">
			<Shape>
				<Actor lineColor="#c2723e"/>
			</Shape>
		</NodeStyle>
	</NodeStyles>
	<ApplyTemplate name="LUAR"/>
	<Template name="LUAR">
		<Variable name="currentItem" as="Items" select="."/>
		<ForEach select="HomeLibrary">
			<Node style="Library" caption="#{? Name +  NewLine + ' Owner: ' + Owner.RealName  }">
				<ForEach select="$currentItem">
					<Node caption="#{? Name + NewLine + 'Owner: ' + Owner.RealName}"/>
					<Edge from="." to="Owner" caption="'Access Right: ' + HomeLibrary.GetUserAccess(Owner).Join(', ')"/>
				</ForEach>
			</Node>
			<Edge from="." to="Groups"/>
			<Edge from="." to="Owner" caption="'Library Owner'"/>
		</ForEach>
		<Variable name="Admins" as="Items" select="HomeLibrary.Groups.SelectMany(Admins)"/>
		<ForEach select="HomeLibrary.Groups">
			<Node style="Group"/>
			<Edge from="." to="AllUsers"/>
		</ForEach>
		<ForEach select="HomeLibrary.AllUsers - HomeLibrary.Groups.SelectMany(AllUsers) ">
			<Edge from="$currentItem.HomeLibrary" to="."/>
		</ForEach>
		<ForEach select="HomeLibrary.AllUsers">
			<Choose>
				<When test=". in $Admins">
					<Node style="GroupAdmins" caption="#{RealName}"/>
				</When>
				<Otherwise>
					<Node style="GroupUsers" caption="#{RealName}"/>
				</Otherwise>
			</Choose>
		</ForEach>
	</Template>
</Graph>


Example Result


Configurable Grid

A grid can be configured to view the data (and export to Excel). Note that editing of this data in the grid is not supported. 


Example Configuration

<Grid> 
    <Columns>
        <ItemNameColumn objectName="ABC" width="75" cellMerge="true" caption="ABC Name"/>
        <TextColumn objectName="ABC" caption="Owner" width="75" cellMerge="true">#{Owner.RealName}</TextColumn> 
        <TextColumn objectName="ABC" caption="Active" width="75" cellMerge="true">#{Owner.Active}</TextColumn> 
        <TextColumn objectName="ABC" caption="Email" width="75" cellMerge="true">#{Owner.EMail}</TextColumn>
        <TextColumn objectName="ABC" caption="LastLogin" width="75" cellMerge="true">#{Owner.LastLogin}</TextColumn>
        
        <TextColumn objectName="ABC" caption="HomeLibrary" width="75" cellMerge="true">#{HomeLibrary}</TextColumn> 
        <TextColumn objectName="ABC_Group" caption="Library groups" width="75" cellMerge="true">#{? .}</TextColumn>
        <TextColumn objectName="ABC_Group" caption="Group Admin" width="75" cellMerge="true">#{? if Admins then Admins.Select(RealName) else 'No admin assigned'}</TextColumn>  
        <TextColumn objectName="ABC_Group" caption="Group Members" width="75" cellMerge="true">#{? AllUsers}</TextColumn>  
        <TextColumn objectName="ABC" caption="Owner access right" width="300" cellMerge="true">#{? HomeLibrary.GetUserAccess(Owner)}</TextColumn> 
        <TextColumn objectName="ABC" caption="Owner has full access right to library" width="300" cellMerge="true">#{? ['Read', 'Write', 'Change', 'ItemsWrite', 'ItemsChange'] in HomeLibrary.GetUserAccess(Owner)}</TextColumn> 
        <TextColumn objectName="ABC" caption="Owner is admin in at least one of the library groups" width="350" cellMerge="true">#{? Owner in HomeLibrary.Groups.SelectMany(Admins)}</TextColumn>
    </Columns>  

    <ForEach select="/IDI">
        <RowObject name="ABC">
            <ForEach select="HomeLibrary.Groups">
                <Row>
                    <RowObject name="ABC_Group">
                        <ForEach select="/IDI">
                            <RowObject name="ABC_SUB">

                                <Row/>

                            </RowObject>
                        </ForEach>
                    </RowObject>
                </Row>  
            </ForEach>
        </RowObject>
    </ForEach>
</Grid>


Example Result


Structure Tree Grid

The tree grid can also be used to view the data (and export to Excel). See Using the Structure Tree Grid for more information on how to add columns.


Example