...
Create 3 new *.ds.xml files:
Code Block |
---|
lang | xml |
---|
title | users.ds.xml |
---|
lang | xml |
---|
|
<DataSource
ID="users"
serverConstructor="com.smartgwt.sample.server.UsersDataSource"
>
<fields>
<field name="userName" type="text" title="User Name" primaryKey="true" />
</fields>
</DataSource>
|
Code Block |
---|
lang | xml |
---|
title | roles.ds.xml | lang | xml |
---|
|
<DataSource
ID="roles"
serverConstructor="com.smartgwt.sample.server.RolesDataSource"
>
<fields>
<field name="roleName" type="text" title="Role Name" primaryKey="true"/>
</fields>
</DataSource>
|
Code Block |
---|
lang | xml |
---|
title | usersRoles.ds.xml |
---|
lang | xml |
---|
|
<DataSource
ID="usersRoles"
serverConstructor="com.smartgwt.sample.server.UsersRolesDataSource"
>
<fields>
<field name="userName" type="text" title="User Name" primaryKey="true"/>
<field name="roleName" type="text" title="Role Name" primaryKey="true"/>
</fields>
<operationBindings>
<operationBinding operationType="add"
requiresRole="admin" requiresAuthentication="true"/>
<operationBinding operationType="remove"
requiresRole="admin" requiresAuthentication="true"/>
</operationBindings>
</DataSource>
|
...
For this example, use the supplyItem.ds.xml file:
Code Block |
---|
lang | xml |
---|
title | supplyItem.ds.xml | lang | xml |
---|
|
<DataSource
ID="supplyItem"
recordXPath="/List/supplyItem"
dataURL="ds/test_data/supplyItem.data.xml"
>
<fields>
<field name="itemID" type="sequence" hidden="true" primaryKey="true"/>
<field name="itemName" type="text" title="Item" length="128" required="true"
editRequiresRole="admin" />
<field name="SKU" type="text" title="SKU" length="10" required="true"
editRequiresRole="admin" />
<field name="description" type="text" title="Description" length="2000"
viewRequiresRole="admin" />
<field name="category" type="text" title="Category" length="128" required="true"
editRequiresRole="admin"
foreignKey="supplyCategory.categoryName"/>
<field name="units" type="enum" title="Units" length="5" editRequiresRole="admin">
<valueMap>
<value>Roll</value>
<value>Ea</value>
<value>Pkt</value>
<value>Set</value>
<value>Tube</value>
<value>Pad</value>
<value>Ream</value>
<value>Tin</value>
<value>Bag</value>
<value>Ctn</value>
<value>Box</value>
</valueMap>
</field>
<field name="unitCost" type="float" title="Unit Cost" required="true" editRequiresRole="Admin">
<validators>
<validator type="floatRange" min="0" errorMessage="Please enter a valid (positive) cost"/>
<validator type="floatPrecision" precision="2" errorMessage="The maximum allowed precision is 2"/>
</validators>
</field>
<field name="inStock" type="boolean" title="In Stock" viewRequiresRole="admin" />
<field name="nextShipment" type="date" title="Next Shipment" viewRequiresRole="admin" />
</fields>
</DataSource>
|
...
While the user is being re-authenticated, the requested operation is put on hold. If the re-authentication is successful, the operation on hold, is released and continues as normal.
Note: We have seen some installations of JDBC Realms where the following request is required, or the system would not accept credentials submitted by the relogin form:
Code Block |
---|
|
RPCRequest request = new RPCRequest();
request.setActionURL("loginSuccessMarker.html");
RPCManager.sendRequest(request); |
You can find more information relating to the re-login mechanism here.
...