嗨,我对cakephp比较新。我尝试创建一个简单的应用程序作为学习和实践。 我使用Auth组件实现了一个简单的用户处理系统。我在用户模型中制作了自定义isAuthorized方法。 注册后,用户需要激活他/她自己才能登录。如果用户未处于活动状态,则Authorized会返回false,并且我还要通知用户他未被激活。 但是我不知道如何在这个方法中设置flash消息(我尝试没有成功)。
function isAuthorized($user, $controller, $action) {
// We have simply user-rights system. There are admins and non-admins.
// This function makes a decision if the user have rights to do what requested.
if($user['User']['active']==0) { // if the user has not been activated yet then gets no rights
$authed=false;
$this->Auth->authError = __("Please activate your user first!",true);
} else {
$this->Auth->authError = __("Sorry, you do not have access to this area.",true);
if($user['User']['admin']==1) { //all admins has all rights
$authed=true;
} else {
if($controller=='Areas' or $controller=='Rooms' or $controller=='Categories') {
if($action=='read') {
$authed=true;
} else {
$authed=false; //non-admin users are not authorized to add or edit rooms or areas
}
} else {
$authed=true; // however they are allowed to do other tasks. the per task rights are controlled within the controllers
}
}
}
//debug($authed);
return $authed;
如你所见,我试过,但我失败了:)它不起作用。
我也试过把
$this->Auth->authError = __("Please activate your user first!",true);
在用户控制器登录()中没有成功
答案 0 :(得分:1)
我意识到Auth组件比控制器方法更早被激活,并且如果用户未经授权则采取行动,这意味着在控制器有机会修改authError之前重定向。这就是我得到“标准”authError的原因。
当我使用自定义授权功能(在模型中)时,用户已经过身份验证(如果有条目)并且已设置会话变量的Auth部分。 因此,如果我检查会话auth数据,我可以在控制器中决定用户是否已经过操作且未激活。然后我设置一条flash消息,以便用户通过auth组件的auth错误消息(无权访问该区域)和另一条消息作为正常的flash消息来激活他/她自己。
function login() {
if(empty($this->Auth->data) and $this->Session->read('Auth.User.active')===0){
$this->Session->setFlash(__('Please activate your user first.',true));
}
}
我认为这不是解决这个问题的最优雅方式;)但我是网络编程和cakephp的新手。