gpt4 book ai didi

CakePHP Auth 拒绝管理路由页面

转载 作者:行者123 更新时间:2023-12-02 04:07:35 25 4
gpt4 key购买 nike

我整个下午都在阅读 Stack Overflow 的问题,试图解决这个问题。

我有一个具有索引/登录/注销/注册功能的用户 Controller ,但也有 admin_index/admin_add/admin_edit/admin_delete 等。

我启用了身份验证组件,并且在我的 users_controller 中,如果 Auth.User.role != 'admin',当我启用 时,我试图拒绝对 admin_* 页面的访问$this->Auth->authorize = 'controller'; 它拒绝访问 site.com/admin/users/页面,并且似乎也终止了注销功能,即使我的帐户的角色设置为管理员。

但是,如果我输入网址,我会被重定向回主主页。

users_controller.php

<?php
class UsersController extends AppController {

var $name = 'Users';

function beforeFilter(){
parent::beforeFilter();
$this->Auth->authorize = 'controller';
$this->Auth->allow('register');
}

function isAuthorized() {
if ($this->Auth->user('role') != 'admin') {
$this->Auth->deny('admin_index','admin_view', 'admin_add', 'admin_edit','admin_delete');
}
}

app_controller.php

<?php
class AppController extends Controller {

var $components = array('Auth', 'Session');

function beforeFilter() {
$this->Auth->loginAction = array('controller'=>'users','action'=>'login', 'admin'=>false);
$this->Auth->logoutRedirect = array('controller'=>'users','action'=>'logout');
$this->Auth->loginRedirect = array('controller'=>'shows', 'action'=>'index');
$this->Auth->autoRedirect = false;
$this->Auth->allow('home');
}

我的第二个问题涉及 $this->Auth->deny('page'); 重定向用户的方式,据我所知它重定向到/但我需要它重定向回用户 Controller 。

希望这一切都有意义,并且我已经提供了足够的信息..

最佳答案

问题的根源可能是你的 isAuthorized() 方法。这应该简单地返回 true 或 false,并指示经过身份验证的用户是否有权访问特定操作。

很难说为什么您会被重定向到主页而不是登录页面。但您可能在某个地方有其他代码,导致事情变得困惑。

尝试按如下方式修改您的代码,看看这是否无法帮助工作:

app_controller.php

<?php 
class AppController extends Controller {
var $components = array('Session', 'Auth' => array(
'loginAction' => array('controller'=>'users','action'=>'login', 'admin'=>false),
'logoutRedirect' => array('controller'=>'users','action'=>'logout'),
'loginRedirect' => array('controller'=>'shows', 'action'=>'index'),
'autoRedirect' => false,
'authorize' => 'controller'
);

function beforeFilter() {
$this->Auth->allow('home');
}

function isAuthorized() {
if (!empty($this->params['prefix']) && $this->params['prefix'] == 'admin') {
if ($this->Auth->user('role') != 'admin') {
return false;
}
}
return true;
}
?>

users_controller.php

<?php
class UsersController extends AppController {

var $name = 'Users';

function beforeFilter(){
parent::beforeFilter();
$this->Auth->allow('register');
}
?>

我将所有 Auth 设置移至 $components 变量中的声明,因为它看起来更干净,并且在那里声明默认值更有意义。但这更多的是个人喜好问题,它不应该对代码的功能产生真正的影响。

另请注意,如果您将 autoRedirect 设置为 false,则必须在 Users::login() 操作中手动重定向登录用户,获取 loginRedirect 值与 $this->Auth->redirect()

我不明白为什么当您未登录并且尝试访问被阻止的操作时应该将您发送到/,但在修复上述问题后也许会更容易弄清楚。 **

关于CakePHP Auth 拒绝管理路由页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7220861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com