kohana 3 授权码修改

Posted

技术标签:

【中文标题】kohana 3 授权码修改【英文标题】:kohana 3 auth code modify 【发布时间】:2011-10-28 21:45:04 【问题描述】:

我直接使用 kohana 指南中的代码来根据登录凭据保护网站

问题是代码似乎只检查用户是否登录并且不区分角色。

如何修改此脚本以仅允许管理员访问此操作

在基本控制器中我有代码

public $assert_auth = FALSE;
public $assert_auth_actions = FALSE;


public function before()

parent::before();
$this->_user_auth();



protected function _user_auth()

$action_name = Request::instance()->action;
if (($this->assert_auth !== FALSE && Auth::instance()->logged_in($this->assert_auth) === FALSE)
|| (is_array($this->assert_auth_actions) && array_key_exists($action_name, $this->assert_auth_actions)
&& Auth::instance()->logged_in($this->assert_auth_actions[$action_name]) === FALSE))

if (Auth::instance()->logged_in())

Request::instance()
->redirect('');

else

Request::instance()
->redirect('admin/login');


在管理页面的控制器中有代码

public $assert_auth_actions = array(
'index' => array('login')
);

【问题讨论】:

【参考方案1】:

首先我要注意,上面的代码是针对 Kohana 3.0 的,对于 3.1 及更高版本,您应该将 Request::instance()->action 替换为 Request::$current->action()。

如果您希望控制器中的所有操作都具有相同的授权要求,则将 $assert_auth 设置为一个数组,该数组包含一个应该访问它的所有角色的列表。

如果您希望同一控制器中的操作具有不同的授权要求,则将 $assert_auth_actions 设置为多维数组。第一个维度应该是操作的名称,选择用户访问操作必须具有的角色列表。

【讨论】:

谢谢,这是有道理的!我现在似乎有另一个问题。我将授权角色更改为管理员,这确实可以阻止普通用户。我做的下一件事是将roles_users 表中的测试用户角色更改为2 以进行测试。该用户根本无法登录。登录管理员的方法与普通用户的登录方法不同吗? $user = ORM::factory('user'); $status = $user->login($_POST); 测试用户是否有登录角色? 是的,我使用默认模式用户、角色、roles_users 设置了身份验证表所有与登录/注销/注册相关的方法都工作正常我尝试的第一件事就是简单地将角色从 1 更改为2在roles_users表中,此时用户无法再登录我尝试的第二件事是修改我的注册码以将用户保存为角色2,即管理员$user->add('roles', ORM::factory('role')->find(1));数据库中的一切看起来都很好,用户已保存并保存了role_user,但我仍然无法使用该用户登录 对不起,我的意思是说我更改了添加角色$user->add('roles', ORM::factory('role')->find(2)); 基本上看起来用户在拥有管理员角色时无法登录 用户可以有多个角色,只有当登录角色在其角色集中时,Auth才会让他们登录。用户 X 可以具有以下角色:登录、管理员、版主、作者、编辑。因此,如果您想要一个能够登录的管理员帐户,则需要同时具有登录和管理员角色。

以上是关于kohana 3 授权码修改的主要内容,如果未能解决你的问题,请参考以下文章

Kohana:授权 ORM

Mysql密码管理及授权

PHP Kohana入门体验教程

邮箱启用授权码发送邮件

django实现发送邮件功能

微信支付之扫码支付模式二