随笔-9  评论-168  文章-266  trackbacks-0
 

以下代码仅有S级权限的当前用户显示"我的工作"区
  
<script language="JavaScript" type="text/javascript">

document.write('<authz:authorize ifAnyGranted="ROLE_HRCHANGE_S"> ');

    document.write('<li><a id="a1" href="#" title="我的工作">我的工作</a></li>');

document.write('</authz:authorize>');

</script>


以下转自:http://yangruirui.javaeye.com/blog/496590

JSP页面中的页面元素,URL,按钮是否可见或变灰都可通过Acegi标签库来实现,使用Acegi标签库,可设置不同的权限ID允许点击的按钮,访问的URL,或隐藏无权限的功能菜单。

如何配置和使用标签库?

打开acegi-security-<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">1.0.3</chsdate>.jar,在META-INF目录中有一个authz.tld文件,将此文件复制到你的web应用的WEB-INF"tld中,然后配置web.xml,增加:

<taglib>

<taglib-uri>http://acegisecurity.sf.net/authz</taglib-uri>

<taglib-location>/WEB-INF/tld/authz.tld</taglib-location>

</taglib>

然后JSP页面可以通过声明<%@ taglib uri="http://acegisecurity.sf.net/authz" prefix="authz"%>来引用标签库。

声明了标签以后,在页面中可以按下面的格式使用acegi标签(authz标签可以嵌套使用):

<!--使用权限标签的例子,标签可以嵌套 -->

<authz:authorize ifAnyGranted="AUTH_USER">

<td> 一般用户权限

</td>

<authz:authorize ifAnyGranted="AUTH_ADMIN">

<td> 超级用户权限

</td>

</authz:authorize>

</authz:authorize>

<authz:authorize ifAnyGranted="AUTH_SYS">

<td> 系统维护权限

</td>

</authz:authorize>

也可以在JavaScript中用document.write输出权限标签:

<script language="JavaScript" type="text/javascript">

//订单中心

document.write('<authz:authorize ifAnyGranted="AUTH_TAG_ORDER_CENTER"> ');

new tree(TREE_ITEMS1, TREE_TPL);

document.write('</authz:authorize>');

</script>

在有javaScript脚本中有时不方便引用acegi标签,可以从SecurityContextHolder中获得权限集合,然后判断当前登录的用户,其权限集合中是否有某权限,根据判断结果来决定显示或隐藏哪些页面元素,见下面的JSP:

<%@ page contentType="text/html; charset=GBK"%>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>

<%@ taglib uri="http://acegisecurity.sf.net/authz" prefix="authz"%>

<%@ page import="org.acegisecurity.Authentication" %>

<%@ page import="org.acegisecurity.context.SecurityContext" %>

<%@ page import="org.acegisecurity.context.SecurityContextHolder" %>

<%@ page import="org.acegisecurity.userdetails.UserDetails" %>

<%@ page import="org.acegisecurity.ui.AccessDeniedHandlerImpl" %>

<%@ page import="org.springframework.aop.framework.ProxyFactoryBean"%>

<%@ page import="org.springframework.context.ApplicationContext"%>

<%@ page import="org.springframework.context.support.ClassPathXmlApplicationContext"%>

<%@ page import="org.acegisecurity.GrantedAuthority"%>

<%@ page import="com.mysoft.common.ValidateAcegiAuth"%>

<%

SecurityContext ctx = SecurityContextHolder.getContext();

%>

。。。

<script language="JavaScript" type="text/javascript">

//下面是调用自定义的类ValidateAcegiAuth,输入当前登录用户的SecurityContext,及权限码,如果有AUTH_FUN_TICKET_CHKERR权限,则执行相应的JS脚本。

<%if(ValidateAcegiAuth.validate(ctx,"AUTH_FUN_TICKET_CHKERR")){%>

//具有AUTH_FUN_TICKET_CHKERR 权限,执行相应js脚本…

<%}%>

</script>

下面是ValidateAcegiAuth类的代码:

package com.mysoft.common;

import org.acegisecurity.Authentication;

import org.acegisecurity.context.SecurityContext;

import org.acegisecurity.context.SecurityContextHolder;

import org.acegisecurity.userdetails.UserDetails;

import org.acegisecurity.ui.AccessDeniedHandlerImpl;

import org.springframework.aop.framework.ProxyFactoryBean;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import org.acegisecurity.GrantedAuthority;

/**

* 验证权限集合中是否有某一权限

* @author bzwang

*

*

*/

public class ValidateAcegiAuth

{

/**

*验证权限集合中是否有某一权限

* @param ctxLoginUser SecurityContext

* @param sAuthID 权限ID

* @return boolean 是否有指定的权限

*/

public static boolean validate(SecurityContext ctxLoginUser,String sAuthID)

{

boolean bool = false;

Authentication authLoginUser = null;

GrantedAuthority[] arrayAuthorities = null;

if(ctxLoginUser!=null)

{

authLoginUser = ctxLoginUser.getAuthentication();

if(authLoginUser!=null)

{

arrayAuthorities = authLoginUser.getAuthorities();

for(int i=0;i<arrayAuthorities.length;i++)

{

if(arrayAuthorities[i].toString().equals(sAuthID))

{

bool = true;

break;

}

}

}

else

{

bool = false;

}

}

else

{

bool = false;

}

return bool;

}

}

posted on 2010-05-25 16:07 紫蝶∏飛揚↗ 阅读(1374) 评论(0)  编辑  收藏 所属分类: EXTJS

只有注册用户登录后才能发表评论。


网站导航: