添加伪静态功能后,acl权限控制是不是会失效?

#1 jacksiu

首先,我不知道关于acl权限理解是否有误,我是这样做的:
在index.php里面定义
'launch'=>array(
       //路由前置过滤器
       'router_prefilter'=>array(
         array('spAcl','mincheck'),
    )
  ),

然后再
'spAcl'=>array(
        'prompt'=>array('user','is_admin')
),

我在user的model类里有一个方法:
function is_admin()
{
     if($_SESSION['user_name']=='admin')
  {
       spClass('spAcl')->set('ADMIN');
       header('location:'.spUrl('admin','admin'));
  }
  else
  {
       header('location:/tour/ban.html');
  }
}

然后我需要控制权限的控制器叫admin,动作也叫admin。
然后在没有配置伪静态的时候,权限控制可行的,但是当添加了伪静态以后,
index.php?c=admin&a=admin 变成了admin-admin.html,问题就是这时候权限控制不起作用了,就是说没有去执行user类里的is_amdin方法,而直接去访问admin控制器中的admin动作了?

admin.php
class admin extends spController
{
     function admin()
    {
        echo '管理员页面';
     }
}

2011-07-17 16:08:09

#2 jacksiu

当然,如果我这时候依然使用index.php?c=admin&a=admin的话,权限依然有用,但是别人就能够通过admin-admin.html直接跳过权限了!

2011-07-17 16:24:56

#3 jacksiu

还有一个问题,是不是伪静态里的映射不能有大写字母?我发现如果控制器/动作映射里有大写会出错的,例如viewBy或者View的时候,虽然控制器和动作能够转换成viewBy.html,但是会提示路由错误,请检查XXX的
'map'=>array(
        'view'=>'viewSight@viewById',
        'list'=>'viewSight@viewAll',
        'viewBy'=>'viewSight@viewByDistrict'
)

2011-07-17 16:47:47

#4 jake

权限和伪静态,都是用路由前的扩展点,由于伪静态可以分析路由,然后在到权限来判断是否有权限执行路由,所以在配置的时候要伪静态在前,权限在后。
这些配置都是数组,所以应该不难理解

伪静态不能有大写

2011-07-17 20:44:27