You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
1.9 KiB
PHTML

3 years ago
<?php
namespace app\admin\model;
use think\Model;
use think\facade\Request;
/**
* 统一授权模型
* @package app\admin\model
*/
class Access extends Model
{
// 设置当前模型对应的完整数据表名称
protected $name = 'admin_access';
/**
* 获取用户授权节点
* @param int $uid 用户id
* @param string $group 权限分组可以以点分开模型名称和分组名称如user.group
* @author 蔡伟明 <314013107@qq.com>
* @return array|bool
*/
public function getAuthNode($uid = 0, $group = '')
{
if ($uid == 0 || $group == '') {
$this->error = '缺少参数';
return false;
}
if (strpos($group, '.')) {
list($module, $group) = explode('.', $group);
} else {
$module = Request::module();
}
$map = [
'module' => $module,
'group' => $group,
'uid' => $uid
];
return $this->where($map)->column('nid');
}
/**
* 检查用户的某个节点是否授权
* @param int $uid 用户id
* @param string $group $group 权限分组可以以点分开模型名称和分组名称如user.group
* @param int $node 需要检查的节点id
* @author 蔡伟明 <314013107@qq.com>
* @return bool
*/
public function checkAuthNode($uid = 0, $group = '', $node = 0)
{
if ($uid == 0 || $group == '' || $node == 0) {
$this->error = '缺少参数';
return false;
}
// 获取该用户的所有授权节点
$nodes = $this->getAuthNode($uid, $group);
if (!$nodes) {
$this->error = '该用户没有授权任何节点';
return false;
}
$nodes = array_flip($nodes);
if (isset($nodes[$node])) {
return true;
} else {
$this->error = '未授权';
return false;
}
}
}