权限控制

本文介绍了一种基于PHP的权限管理系统实现方法,包括文件夹内控制器文件的读取、类及方法注释的获取,并将这些信息存储到数据库中;同时实现了用户登录时角色权限的加载及后续请求中的权限验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

$array_file = array();
        $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、注意:判断时间权限时候要换成小写或大写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值