PhalApi(π框架)1.40登录授权接口过滤重构

1在PhalApi框架中有过滤器filterCheck,拦截所有接口

在注册好统一的接口验签的过滤器拦截服务后,是会存在这样一种情况:即个别的接口不需要签名

除了可以像上面这样编码实现,排除个别接口服务的接口验证,还可以使用接口服务白名单配置,通过框架自身实现对指定配置的接口服务排除。即调用的接口服务,如果配置了白名单,则不调用过滤器。 

接口服务白名单配置是:app.service_whitelist

 

2模仿该过滤器可以重构某些接口需要授权过滤名单

(1)配置参数

 

/**
 * 登录授权名单格式:接口服务类名.接口服务方法名
 *
 * 示例:
 * - *.*            通配,全部接口服务,慎用!
 * - Default.*      Api_Default接口类的全部方法
 * - *.Index        全部接口类的Index方法
 * - Default.Index  指定某个接口服务,即Api_Default::Index()
 /*
 * 登录授权名单
 */
'login_list' => array(
    'Holiday.getHouseOwnerInfo',
    'House.getHouseIndex',
    'House.AddHouse',
    'House.editHouse', 
    'Order.*',}
(2)/**
 * 验证是否是登录名单内接口方法
 */
protected function  isLoginWhitelist(){
    $api = DI()->request->getServiceApi();
    $action = DI()->request->getServiceAction();

    $serviceWhitelist = DI()->config->get('app.login_list', array());
    foreach ($serviceWhitelist as $item) {
        $cfgArr = explode('.', $item);
        if (count($cfgArr) < 2) {
            continue;
        }

        // 短路返回
        if ($this->equalOrIngore($api, $cfgArr[0]) && $this->equalOrIngore($action, $cfgArr[1])) {
            return FALSE;
        }
    }

    return TRUE;
}
(3)验证登录时过滤登录名单protected function userCheck(){
  // 过滤必须授权名单  
if($this->isLoginWhitelist()) { 
 return;  
}  
$key = isset($_POST['Key']) ? $_POST['Key'] : ''; 
 if (empty($key)) {  
   $key = isset($_GET['Key']) ? $_GET['Key'] : '';  
}  
$member_domain = new Domain_Member();  
$token_info = $member_domain->getMebertoken($key);  
if ($token_info) {  
$condition = array();  
$condition['member_id'] = $token_info['member_id'];  
$this->member_info = $member_domain->getMmberInfo($condition);  
if ($this->member_info) {   
} else {  
   throw new PhalApi_Exception_BadRequest('请登录!', 20);  }  
} else { 
 throw new PhalApi_Exception_BadRequest('请登录!', 20);  
  } 
 }

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值