public void setPermission(int permission,boolean yes){ int tmp =1; tmp=tmp << permission; if (yes) { aclState |= tmp; }else { aclState &= ~tmp; } }
/** * 受权:对角色或者用户 */ public void addOrUpdatePermission(String principalType, int principalSn, int resourceSn, int permission, boolean yes) { //根据主体表示和资源表示查找ACL实例 ACL acl=findACL(principalType, principalSn, resourceSn); //若是存在则更新ACL实例,更新受权 if (acl!=null) { acl.setPermission(permission, yes); getHibernateTemplate().update(acl); return; } //若是不存在则建立新的实例 if (acl==null) { acl=new ACL(); acl.setPrincipalType(principalType); acl.setPrincipalSn(principalSn); acl.setResourceSn(resourceSn); acl.setPermission(permission, yes); getHibernateTemplate().save(acl); } }
public int getPermission(int permission){ if (aclTriState == 0xFFFFFFFF) { return ACL_NEUTRAL; } int tmp=1; tmp=tmp << permission; tmp &= aclState; if (tmp !=0) { return ACL_YES; } return ACL_NO; }
public boolean hasPermission(int userId, int resourceSn, int permission) { //查找对特定用户的受权 ACL acl=findACL(ACL.TYPE_USER, userId,resourceSn); if (acl!=null) { int yesOrNo=acl.getPermission(permission); //若是是肯定的受权 if (yesOrNo != ACL.ACL_NEUTRAL) { return yesOrNo==ACL.ACL_YES ? true:false; } } //继续查找用户的角色受权 String hql="select r.id from UsersRoles ur join ur.user u join ur.role r "+ "where u.id=? order by ur.orderNo"; List aclIds=getHibernateTemplate().find(hql,userId); //依照角色的优先级依次查找其受权 for (Iterator iter = aclIds.iterator(); iter.hasNext();) { Integer rid = (Integer) iter.next(); acl=findACL(ACL.TYPE_ROLE,rid, resourceSn); //一旦发现受权,便可返回结果 if(acl!=null){ return acl.getPermission(permission) == ACL.ACL_YES ?true:false; } } return false; }