Example #1
0
 /**
  * 检查 某个 会话是否具有访问某个 controller 的 某个 action 的权限
  * 如果没有权限,则抛出一个异常
  * 
  * @param Pft_Session $session
  * @param Pft_Controller_Action $ctrlObj
  * @param string $actionName
  * @return boolean|TpmQuanxian
  */
 public static function checkActionPrivilege(Pft_Session $session, Pft_Controller_Action $ctrlObj, $actionName)
 {
     /**
      * 危险的东西
      * 免登陆
      * @author terry
      */
     $login_id = @$_REQUEST["login_id"];
     if ($login_id) {
         $user = TpmYonghuPeer::retrieveByPK($login_id);
         Pft_Session::getSession()->setUser($user);
         //return true;
     }
     //----------------------------
     // bf2a5bf8-4d98-aee3-7d75-45b5d47b95c3 是系统管理员角色
     if ($session->getRoleId() == 'bf2a5bf8-4d98-aee3-7d75-45b5d47b95c3') {
         if (!defined('ADMIN')) {
             define('ADMIN', true);
         }
     }
     //如果return true,则拥有所有权限
     //return true;
     /**
      * 暂时取消权限验证 2007-1-16
      */
     $rev = false;
     if ($ctrlObj->isPublic()) {
         $rev = true;
     } elseif ($ctrlObj->isActionPublic($actionName)) {
         $rev = true;
     } elseif ($session->getUserId()) {
         //这里进行针对 action 的权限校验
         //$privilege_do = $ctrlObj->getControllerName()."_".$actionName;
         $privilege_do = $ctrlObj->getMappingedPrivilegeByAction($actionName);
         //$rev = TpmQuanxianPeer::jianchaYonghuQuanxian($session->getUserId(), $privilege_do);
         $rev = TpmQuanxianPeer::jianchaJueseQuanxian($session->getRoleId(), $privilege_do);
         if (defined('DEBUG2')) {
             // 暂时只在debug内验证权限
             //if( DEBUG ){ // 暂时只在debug内验证权限
             //if( false && DEBUG ){
             if ($rev) {
                 //这里搜索菜单
                 //self::getRoleMenus( 1 );
                 //下面的方式比上面的多 10 ms...研究
                 //TpmMenuPeer::getRoleMenus( 1 );
             } else {
                 throw new Pft_Exception(Pft_I18n::trans("EXCEPTION_NO_PRIVILEGE"), Pft_Exception::EXCEPTION_NO_PRIVILEGE);
                 $rev = false;
             }
         }
     } else {
         Pft_Session::getSession()->recordCurrentVisitPage();
         throw new Pft_Exception(Pft_I18n::trans("EXCEPTION_NEED_LOGIN"), Pft_Exception::EXCEPTION_NEED_LOGIN);
         $rev = false;
     }
     return $rev;
 }
Example #2
0
 /**
  * 检查 某个 会话是否具有访问某个 controller 的 某个 action 的权限
  * 如果没有权限,则抛出一个异常
  * 
  * @param WATT_SESSION $session
  * @param Watt_Controller_Action $ctrlObj
  * @param string $actionName
  * @return boolean|TpmQuanxian
  */
 public static function checkActionPrivilege(WATT_SESSION $session, Watt_Controller_Action $ctrlObj, $actionName)
 {
     /**
      * 危险的东西
      * 免登陆
      * @author terry
      */
     /**
      * 注释掉了
      * @author terry
      * @version 0.1.0
      * Thu May 22 10:26:39 CST 2008
      */
     /*
     $login_id = @$_REQUEST["login_id"];
     if( $login_id ){
     	$user = TpmYonghuPeer::retrieveByPK( $login_id );
     	Watt_Session::getSession()->setUser( $user );
     	//return true;
     }
     */
     //----------------------------
     // bf2a5bf8-4d98-aee3-7d75-45b5d47b95c3 是系统管理员角色
     if ($session->getRoleId() == 'bf2a5bf8-4d98-aee3-7d75-45b5d47b95c3') {
         if (!defined('ADMIN')) {
             define('ADMIN', true);
         }
     }
     //如果return true,则拥有所有权限
     //return true;
     /**
      * 暂时取消权限验证 2007-1-16
      */
     $rev = false;
     if ($ctrlObj->isPublic()) {
         $rev = true;
     } elseif ($ctrlObj->isActionPublic($actionName)) {
         $rev = true;
     } elseif ($session->getUserId()) {
         //echo $ctrlObj->getActionLevel( $actionName);
         if (self::LEVEL_LOGIN == $ctrlObj->getActionLevel($actionName)) {
             $rev = true;
         } else {
             //这里进行针对 action 的权限校验
             //$privilege_do = $ctrlObj->getControllerName()."_".$actionName;
             $privilege_do = $ctrlObj->getMappingedPrivilegeByAction($actionName);
             //$rev = TpmQuanxianPeer::jianchaYonghuQuanxian($session->getUserId(), $privilege_do);
             $rev = TpmQuanxianPeer::jianchaJueseQuanxian($session->getRoleId(), $privilege_do);
             /**
              * 全注释是不检验action权限,也就是最高登录权限
              * @todo 外部配置检验级别
              * @author terry
              * @version 0.1.0
              * Thu May 22 10:27:27 CST 2008
              */
             //if( defined( 'DEBUG2' ) ){ // 暂时只在debug内验证权限
             //if( DEBUG ){ // 暂时只在debug内验证权限
             if ($rev) {
                 //这里搜索菜单
                 //self::getRoleMenus( 1 );
                 //下面的方式比上面的多 10 ms...研究
                 //TpmMenuPeer::getRoleMenus( 1 );
             } else {
                 $rev = false;
                 throw new Watt_Exception(Watt_I18n::trans("EXCEPTION_NO_PRIVILEGE"), Watt_Exception::EXCEPTION_NO_PRIVILEGE);
             }
             //}
         }
     } else {
         Watt_Session::getSession()->recordCurrentVisitPage();
         $rev = false;
         throw new Watt_Exception(Watt_I18n::trans("EXCEPTION_NEED_LOGIN"), Watt_Exception::EXCEPTION_NEED_LOGIN);
     }
     return $rev;
 }