thinkphp下的RABC 实现——2015/5/7

 

目前有一个问题:

虽然给用户及角色分配了权限,也实现对应的权限的显示

但是用户可以通过显示修改url地址达到访问其他权限的目的

解决:

每次用户访问的控制器方法都需要和对应的角色里边的ac信息进行比较

ac信息里边存在这个控制器和方法就允许访问,否则禁止访问

技术角度:

在每个控制器被实例化执行的同时就判断当前的控制器和方法是否允许角色访问

为了程序维护方便,给普通控制器制作父类控制器,在父类控制器的构造方法里边做控制器和方法的过滤工作。


1. 在新父类控制器AdminController里边实现每次访问控制器和操作方法过滤

a) 具体限制分三种情况

i. 自定义方法不进行权限限制(Index/head  left  right   Manager/login)

ii. 系统管理员也不进行权限限制

iii. 当前用户允许访问的权限就是角色对应的权限

namespace Component;
use Think\Controller;
class AdminController extends  Controller
{
    public function __construct()
    {
        parent::__construct();
        $role = D('role');
        $allowed_auth = array("Index-left","Index-index","Index-right","Index-head","Manager-login","Manager-logout");
        $condition1 = $_SESSION['mg_role_id'];
        $role_info = $role->where("role_id=$condition1")->find();
        $admin_auth = $role_info['role_auth_ac'];
        $module_action = CONTROLLER_NAME . "-" . ACTION_NAME;
        //echo $module_action;
        if($_SESSION['mg_role_id']==null){
            $this->error('请先登录',U("Manager/login"));
        }else {
            if (!in_array($module_action, $allowed_auth) && $_SESSION['mg_role_id'] != 0 && strpos($admin_auth, $module_action) === false) {
                $this->error('没有访问权限', U("Index/index"));
            }
        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值