结论
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没见到用
所以猜测基本正确