> php教程 > php >

人人商城微擎的ifp ife ifpp的作用

来源:网络 文章列表 2019-12-18 8
ifp 当前用户是否有  控制器--方法 的权限 包括add edit del send view等 方法必带。ife 当前用户是否有  控制器--方法 的权限 编辑或添加 第二个参数是当前的数据数组 如果数组包含id 则验证edit方法 如果数组不包含 则验证add方法  第二个参数如果不带 完全等于ifp

ifp 当前用户是否有  控制器--方法 的权限 包括add edit del send view等 方法必带

ifpp 当前用户是否有  插件 的权限

ife 当前用户是否有  控制器--方法 的权限 编辑或添加 第二个参数是当前的数据数组 如果数组包含id 则验证edit方法 如果数组不包含 则验证add方法  第二个参数如果不带 完全等于ifp

ife是ifp的简化用法

 

下面是思路 

先去搜索这几个函数的解析 

$str = preg_replace('/{ifp\\s+(.+?)}/', '<?php if(cv($1)) { ?>', $str);
$str = preg_replace('/{ifpp\\s+(.+?)}/', '<?php if(cp($1)) { ?>', $str);
$str = preg_replace('/{ife\\s+(\\S+)\\s+(\\S+)}/', '<?php if( ce($1 ,$2) ) { ?>', $str);


function cv($permtypes = '') {
   $perm = com_run('perm::check_perm', $permtypes);
   return $perm;
}

 
if (!function_exists('cp')) {

   function cp($pluginname = '') {
       $perm = com('perm');

       if ($perm) {
           return $perm->check_plugin($pluginname);
       }

       return true;
   }

}

function ce($permtype = '', $item = NULL) {
   $perm = com_run('perm::check_edit', $permtype, $item);
   return $perm;
}

cv为例子

com_run 的意思 com(perm) 类 执行check_perm 

com(perm) = $model = EWEI_SHOPV2_CORE . 'com/' . strtolower($name) . '.php'; 

也就是Perm_EweiShopV2ComModel类

的check_perm  方法

这个方法 根据& 和| 来拆分参数 并调用check

check再往下看  调用了用户角色表 那应该就是校检权限

 

 ifp和ife的区别在于check_perm和check_edit

看check_edit函数里面的一段

if (!($this->check_perm($permtype))) 
{
  return false;
}
if (empty($item['id'])) 
{
  $add_perm = $permtype . '.add';
  if (!($this->check($add_perm))) 
  {
     return false;
  }
  return true;
}
$edit_perm = $permtype . '.edit';
if (!($this->check($edit_perm))) 
{
  return false;
}

核心区别是 check_edit 会自动转化为edit或add

 其他就跟check_perm一样了

 

 所以结论 

ifp 当前用户是否有  控制器--方法 的权限 包括add edit del 可能有查看吧 方法必带

ifpp 当前用户是否有  插件 的权限

ife 当前用户是否有  控制器--方法 的权限 编辑或添加 第二个参数是当前的数据数组 如果数组包含id 则验证edit方法 如果数组不包含 则验证add方法

 

ife是ifp的简化用法

上面是跟下代码的大概推论 去验证了下

 

ife

比如{ife 'goods' $item} 后面的item参数  是用来验证是否要验证add还是验证edit方法

{ife 'merch.user' $item} ife的写法都是这样  控制器+model(不加add/edit/del/..方法) +当前的实际数组

 

ifp

{ifp 'messages.delete'}

{ifp 'meeting.live.notice.send'}

一定是 控制器+model+具体方法(add/edit/del/send..方法)

ifpp没见到用 

所以猜测基本正确

腾讯云限量秒杀

1核2G 5M 50元/年 2核4G 8M 74元/年 4核8G 5M 818元/年 CDN流量包 100GB 9元

版权声明

本站部分原创文章,部分文章整理自网络。如有转载的文章侵犯了您的版权,请联系站长删除处理。如果您有优质文章,欢迎发稿给我们!联系站长:
愿本站的内容能为您的学习、工作带来绵薄之力。

评论

  • 随机获取
点击刷新
精彩评论

友情链接