一般在C层前应该有front_controller或dispatcher用来分派用户的请求
这样用户的请求有了统一的入口,所以应该在此层进行权限判断,用户请求->dispatcher->是否有权限? 有   ->controller(调用model,生成view)->用户
                                  没有 ->错误

解决方案 »

  1.   

    >一般在C层前应该有front_controller或dispatcher用来分派用户的请求
    >这样用户的请求有了统一的入口,所以应该在此层进行权限判断,PHP下的C我理解为用来接收和解释用户请求,然后调用M返回结果,再把结果传入V进行解释和输出。对于社区之类的系统,权限检测的逻辑通常都比较复杂,要对应于每种请求分别进行不同逻辑的权限检测,所以“接收和解释请求->权限检测->调用M->调用V”这个该如何分离呢?如果都作为dispatcher的话,那后面的C层的任务是什么呢?>我不觉得这样做有什么好处。
    >如果其中有一些由于模型的原因需要修改,而其他模型又不变,到时候还不是要单独再写一次?
    >我觉得与其将明晰的逻辑结构搞混乱了,还不如分开多个文件,反正也就是复制粘贴的活,何
    >乐而不为呢?而这样的话,就不会出现你所说的那种情况了。主要是前天看到关于C的一些帖子里说可以用XML等配置文件来驱动C,这样的话C就可以公用了。也不是非要这样,反正我还没考虑好,呵呵。>我现在写的C不是对象,我觉得C层用类来写不太合适,因为它基本只有流程,没有它自己的属
    >性和方法,当然如果你要强加给它的话也可以,但这样逻辑反而会搞复杂。如果以不同的C对应不同的请求类型的话,那C就不是只有一个,所以得对应写了啊。。
      

  2.   

    PHP下的C我理解为用来接收和解释用户请求,然后调用M返回结果,再把结果传入V进行解释和输出。
    是这样,但C并不负责派发请求,只处理具体任务
    举个例子
    用户请求index.php?request=user&act=add(添加用户操作)
    那么index.php做为dispatcher先分析请求,发现是request=user, act=add
    那么就直接加载user_controller并调用add方法
    user_controller具体处理详细情况,并把处理结果输出在这里你可以在dispatcher层检查权限
    if(!$user->isPermmitted(ADD_USER))
       die('没有权限');