Dorado 5 : 13.2.角色设定 (RF1)

通过前面的描述我们已经知道角色信息从属于一个页面,因此在dorado的设计中角色信息是通过ViewModel的role属性描述的。参看ViewModel的接口申明(com.bstek.dorado.view.ViewModel):

public java.lang.String getRole()取得与视图模型相关的角色.
public void setRole(java.lang.String role)设置与视图模型相关的角色.如果此处需要描述多个角色,可以使用","分隔各角色名.

由于角色信息的初始化时在视图模型的初始化过程中完成的,因此对于角色的设定我们就因该在视图模型的初始化函数中实现,视图模型的初始化函数申明如下:

public void init(int state)throws java.lang.Exception视图模型初始化

这样我们就可以在视图模型的实现类中设定角色

public void init(int state) throws Exception {
this.setRole("填入角色ID");//注意与super.init(state);的代码位置关系
super.init(state);//系统执行默认的视图模型初始化动作
}

以上的代码中要注意设定角色代码的位置,由于视图模型通过super.init(state)完成初始化以及角色配置文件信息的读取,因此在super.init(state)之前我们必须设定好视图模型的角色信息(千万注意)
对于角色的设定,通常是需要根据登陆用户的信息才能决定的,对于大多数的web系统而言都会将登陆信息缓存到用户的上下文中(Session),则可以通过dorado的上下文(DoradoContext)获取登陆用户信息.如下范例:

DoradoContext context = DoradoContext.getContext();
UserInfo user = context.getAttribute(DoradoContext.SESSION, "loginUser");

通过DoradoContext获取登陆用户信息,并转换为当前页面配置的角色:

DoradoContext context = DoradoContext.getContext();
UserInfo user = context.getAttribute(DoradoContext.SESSION, "loginUser");
if (user.getRole().equals("admin")) this.setRole("page_admin");
else this.setRole("page_user");

此处代码将页面角色命名为page_admin,page_user是为了突出于系统角色的差别。
通过这种方式指定dorado页面的角色。以上代码中DoradoContext的具体说明参考附录