概述
Dorado提供了角色配置文件的功能。通过角色配置文件,可以方便的实现对界面显示控制。在应用程序当中常常会需要这种功能,即同一组界面当不同的用户访问时这组界面需要以不尽相同的方式展现给用户。例如:表格中的"价格"信息只有当"部门经理"及更高职位的用户访问时才可见, 而对于其它用户则是隐藏的。这种逻辑规则可以非常方便的利用dorado中的role文件来进行描述。本示例的链接如下:
准备工作
新建一工程security,并且配置好数据库,具体步骤参考3.1.2节。
开发步骤
添加Dataset
步骤1:添加一Common ViewModel,文件名为RoleConfig。
步骤2:为RoleConfig添加一ViewModel实现,代码如下:
import java.util.List; import com.bstek.dorado.common.DoradoContext; import com.bstek.dorado.data.db.DBStatement; import com.bstek.dorado.utils.variant.VariantSet; import com.bstek.dorado.view.DefaultViewModel; import com.bstek.dorado.view.control.Menu; import com.bstek.dorado.view.control.MenuItem; import com.bstek.dorado.view.control.MenuItemContainer; /** * RoleConfigViewModel */ public class RoleConfigViewModel extends DefaultViewModel { private void createMenuItem(MenuItemContainer itemContainer, String parentId) throws Exception { DBStatement st = new DBStatement(); try { st.setSql(DBStatement.SELECT, "category"); if (parentId == null) { st.parameters().setString("parent_id", "$null"); } else { st.parameters().setString("parent_id", parentId); } List list = st.queryForList(); int sz = list.size(); for (int i = 0; i < sz; i++) { VariantSet category = (VariantSet) list.get(i); String categoryId = category.getString("category_id"); MenuItem item = itemContainer.addItem(categoryId, category .getString("category_name") + "[" + categoryId + "]"); createMenuItem(item, categoryId); } } finally { st.close(); } } public void init(int state) throws Exception { DoradoContext context = DoradoContext.getContext(); setRole(context.getParameter("role")); super.init(state); } protected void initControls() throws Exception { super.initControls(); Menu menu1 = (Menu) getControl("menu1"); createMenuItem((MenuItemContainer) menu1, null); } }
步骤3:添加一FormDataset,id设置为datasetRole,添加一Filed,name设置为role。
步骤4:添加一AutoSqlDataset,选择表employee,选择所有字段,属性设置如下:
属性 | 值 |
---|---|
Id | datasetEmployee |
originTable | EMPLOYEE |
pageSize | 20 |
添加DropDown、TextEditor
步骤1:添加一ListDropDown,属性设置如下:
属性 | 值 |
---|---|
fixed | true |
id | dropdownRole |
步骤2:为dropdownRole添加4个Item,label设置为空,value分别设置为role1,role2,role3,role4.
步骤3:添加一TextEditor,属性设置如下:
属性 | 值 |
---|---|
dataset | datasetRole |
dropDown | dropdownRole |
field | role |
id | editorRole |
添加RequestCommand和Button
步骤1:添加一RequestCommand,属性设置如下:
属性 | 值 |
---|---|
dataset | datasetRole |
id | commandRefresh |
path | role-config.jsp |
步骤2:为commandRefresh的beforeExecute事件添加如下代码:
if (!datasetRole.getValue("role")) { return new DoradoException("请选择一个角色!"); }
步骤3:添加一Button,属性设置如下:
属性 | 值 |
---|---|
command | commandRefresh |
id | buttonRefresh |
value | 使用此角色访问本页面 |
添加SubWindow和Button
步骤1:添加一SubWindow,属性设置如下:
属性 | 值 |
---|---|
id | subwindow |
title | 这是角色[${Request.role}]所看到的视图 |
步骤2:添加一Button,属性设置如下:
属性 | 值 |
---|---|
id | button1 |
value | 按钮1 |
步骤3:添加一Button,属性设置如下:
属性 | 值 |
---|---|
id | button2 |
value | 按钮2 |
步骤4:添加一Button,属性设置如下:
属性 | 值 |
---|---|
id | button3 |
value | 按钮3 |
添加Menu、MenuBar和DataTable
步骤1:添加一Menu,属性设置如下:
属性 | 值 |
---|---|
id | menu1 |
popupContainer | document.body |
步骤2:添加一MenuBar,属性设置如下:
属性 | 值 |
---|---|
id | menubar1 |
menu | menu1 |
步骤3:添加一DataTable,属性设置如下:
属性 | 值 |
---|---|
id | tableEmployee |
height | 100% |
width | 100% |
dataset | datasetEmployee |
添加角色配置文件
步骤1:选中View的根节点,点击"Open Role Config"按钮,会提示要不要创建Role Config,选择是,如下图所示:
步骤2:添加一个角色,设置其角色名为role1,为其添加EL表达式,如下图所示:
为role1添加的EL表达式如下:
datasetEmployee.getField("email").setVisible(false) datasetEmployee.getField("cmnt").setVisible(false) menu1.findItem("1").setVisible(false) menu1.findItem("2/21").setDisabled(true) menu1.findItem("2/22").setVisible(false)
步骤3:添加一角色role2,设置其template为role1,为role1添加的EL表达式如下:
button1.setIgnored(true) button2.setDisabled(true) datasetEmployee.getField("salary").setReadOnly(true) menu1.findItem("2/1").setDisabled(true) menu1.findItem("2/2").setDisabled(true) menu1.findItem("3").setDisabled(true)
步骤4:添加一角色role3,为role1添加的EL表达式如下:
button2.setIgnored(true) button3.setIgnored(true) menubar1.setIgnored(true)
步骤5:添加一角色role4,为role1添加的EL表达式如下:
tableEmployee.setIgnored(true)
创建Jsp页面
生成Jsp页面以后再编辑一下布局,最后结果如下:
<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib uri="http://www.bstek.com/dorado" prefix="d" %> <html> <head> <title></title> </head> <body style="overflow: hidden"> <d:View config="RoleConfig"> <d:Layout type="border"> <d:Pane position="top"> <d:Layout type="hflow" height="1"> <d:Pane> 角色 </d:Pane> <d:Pane> <d:TextEditor id="editorRole" /> </d:Pane> <d:Pane> <d:Button id="buttonRefresh" /> </d:Pane> </d:Layout> </d:Pane> <d:Pane position="center"> <d:SubWindow id="subwindow" width="100%" height="100%" draggable="false" resizable="false" showMinimizeButton="false" showMaximizeButton="false"> <d:Layout type="border"> <d:Pane position="top"> <d:MenuBar id="menubar1" /> </d:Pane> <d:Pane position="center"> <d:DataTable id="tableEmployee" /> </d:Pane> <d:Pane position="bottom"> <d:Layout type="hflow" height="1"> <d:Pane> <d:Button id="button1" /> </d:Pane> <d:Pane> <d:Button id="button2" /> </d:Pane> <d:Pane> <d:Button id="button3" /> </d:Pane> </d:Layout> </d:Pane> </d:Layout> </d:SubWindow> </d:Pane> </d:Layout> </d:View> </body> </html>
查看运行效果
启动服务器后,浏览效果如下:
知识点
本节知识点为角色配置文件的使用。关于角色配置文件,可以参考《dorado 5 用户指南 1.1》的第13章。
Attachments:
worddav11566d2818ce7031764c85cdbd143417.png (image/png)
worddav869796747dd7df72ae7c14cc5670d09c.png (image/png)