$dir = APP . "Controllers/";
//打开文件流
$handle = opendir(__DIR__);
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$tmp = realpath($dir . '/' . $file);
if (!is_dir($tmp)) {
$controller = str_replace('.php', '', $file);
if ($controller != "BaseController") {
$array_file[] = $controller;
}
}
}
}
closedir($handle);
打开文件获取文件名称
$classComment = (new ReflectionClass ($controller))->getDocComment();
影射方法获取方法中的注释。
if ($permission_list) {
foreach ($permission_list as $permission) {
$_SESSION['permission'][] = md5(strtolower($permission['controller']) . "@" . strtolower($permission['method']));
$this->gen_menu_list($permission['controller'], $permission['method'], $permission['menu'],
$permission['menu_sort'], $permission['sub_menu'], $permission['sub_menu_sort']);
}
}
function action_permission($controllers, $method)
{
if (isset($_SESSION['userinfo'])) {
if ($_SESSION['userinfo']['id'] != 1) {
if (!in_array(md5(strtolower($controllers) . "@" . strtolower($method)), $_SESSION['permission'])) {
return false;
} else {
return true;
}
} else {
return true;
}
}
}
1、获取文件夹中的所有文件名称,打开文件名称,获取控制器中的类注释(控制器名称)和方法的注释(方法名称),存放到数据库中。
2、登陆时候每次获取登陆者的角色id,去查询该角色所有的权限和公共权限存放到session中。
3、在basecontroller控制器判断访问的URL中的控制器和方法访问做判断,存在通过,不存在提示没有该权限
4、注意:判断时间权限时候要换成小写或大写