权限控制

  编写操作页面,添加zbutton,通过按钮的priv属性指向权限项ID来完成对各按钮的操作权限设置。

  代码示例:

  <z:toolbar>

  <z:button onClick="add_l();" theme="flat" priv="LinkManage.Add"><img src="../icons/icon003a2.png" /><z:lang id="Links.LinksJSP.NewLinkGroupButtonName">新建分组</z:lang></z:button>

  <z:button onClick="edit_l();" theme="flat" priv="LinkManage.Edit"><img src="../icons/icon003a4.png" /><z:lang id="Links.LinksJSP.ModifyGroupButtonName">修改分组</z:lang></z:button> 

  <z:button onClick="del_l();" theme="flat" priv="LinkManage.Delete"><img src="../icons/icon003a3.png" /><z:lang id="Links.LinkListJSP.DelButtomName">删除</z:lang></z:button>

  </z:toolbar>

  

  设置用户拥有的操作权限

1_副本

 

  界面显示效果

  通过priv设置了权限的按钮,如果对应的用户没有相应的操作权限,按钮会灰掉不可用。

  对于一些无需通过按钮事件,就能直接调用后台方法的情况(例如页面信息初始化,绑定列表信息等),则可以通过对后台方法增加@Priv注解,控制用户对后台方法的调用权限。

1 页面代码中

  <z:datagrid id="linkdg1" method="Link.getLinkGroupGrid" size="15">

  <table width="100%" cellpadding="2" cellspacing="0" class="z-datagrid">

  <tr ztype="head" class="dataTableHead">

  <td width="10%" ztype="selector" field="id"> </td>

  <td width="50%"><z:lang id="Links.LinksJSP.Name">名称</z:lang></td>

  <td width="40%"><z:lang id="Links.LinkGroupDialogJSP.LinkGroupCode">链接分类别名</z:lang></td>

  </tr>

  <tr onDblClick="edit_l();" onClick="showLinkList('${ID}');" class1="dg_tr_odd" class2="dg_tr_even">

  <td> </td>

  <td>${Name}</td>

  <td>${Code}</td>

  </tr>

  <tr ztype="pagebar">

  <td colspan="4">${PageBar}</td>

  </tr>

  </table>

  </z:datagrid>

  

2 JAVA代码中

  在java代码中,有两种使用权限的方式,“注解方式”和“代码块方式”,如下示例:

  @Priv(LinkPriv.MenuID// 1、使用注解方式

  public void getLinkGroupGrid(DataGridAction dga) {

  long siteID = SiteBL.getCurrentSite();

  // 2、使用java代码方式

  // 获取当前用户权限

  Privilege priv = PrivBL.getCurrentPrivilege(Privilege.OwnerType_User, User.getCurrent().getUserName());

  // 判断当前用户是否有添加权限

  if (priv.hasPriv(SitePrivService.Prefix + siteID)) {

  QueryBuilder qb = new QueryBuilder("select * from ZCLinkGroup where SiteID=? ", siteID);

  String name = dga.getParam("SearchContent");

  if (StringUtil.isNotEmpty(name)) {

  qb.append(" and name like ?""%" + name.trim() + "%");

  }

  qb.append(" ORDER BY ADDTIME DESC");

  dga.setTotal(qb);

  DataTable dt = qb.executePagedDataTable(dga.getPageSize(), dga.getPageIndex());

  dga.bindData(dt);

  }

  }

  

  如果用户拥有后台方法标注的操作权限,就能顺利的调用后台方法,否则就会提示操作权限不足:

  此外,系统中还有些界面在多个不同菜单下都会被调用,因此界面上的操作按钮需要多个菜单下的权限项同时控制。若单纯在按钮的priv属性里面通过||、&&等逻辑操作符连接多个权限项仍然不能完全正确的控制按钮的操作权限,则可考虑通过js代码Application.hasPriv()判断当前用户是否拥有相应的操作权限来控制控件的显示隐藏等属性以实现对用户操作权限的控制。

 

3 JavaScript中

  function checkPriv(){

  $('#sitePriv_form1').enable();

  $('#sitePriv_toolbar1').enable();

  <z:if condition="${Type=='B'}">

  if(!Application.hasPriv("Platform.Branch.SetPrivRange")){

  $('#sitePriv_form1').disable();

  $('#sitePriv_toolbar1').disable();

  }

  </z:if>

  <z:if condition="${Type=='U'}">

  if(!Application.hasPriv("Platform.User.SetPriv")){

  $('#sitePriv_form1').disable();

  $('#sitePriv_toolbar1').disable();

  }

  </z:if>

  <z:if condition="${Type=='R'}">

  if(!Application.hasPriv("Platform.Role.SetPriv")){

  $('#sitePriv_form1').disable();

  $('#sitePriv_toolbar1').disable();

  }

  </z:if>

  }

 

hackIE