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; }