【问题标题】:Laravel 5.0 redirect not workingLaravel 5.0 重定向不起作用
【发布时间】:2015-10-22 21:17:05
【问题描述】:

我正在 Laravel 5.0 中开发自定义访问控制系统。我创建了一个辅助函数来在执行函数之前检查用户是否有权限

public function index() {

    if( has_permission( 'blahblah' ) ) {
      // Do actions
    }
}

我有一个辅助函数has_permission

function has_permission( $action ) {
   $current_user_perms = array( 'view_users', 'create_users', 'edit_users', 'delete_users' );
   if( !in_array( $action, $current_user_perms ) ) {
      return redirect()->route('access_denied');
   }

   return true;
}

但是当权限失败时,它不是重定向。有什么想法吗?

【问题讨论】:

  • 如果有帮助,您可以接受我的回答以供更多读者使用:)

标签: php laravel access-control


【解决方案1】:

您应该返回重定向响应以使其正常工作。

  1. 更改帮助程序以返回布尔值:
function has_permission($action) {
    $current_user_perms = ['view_users', 'create_users', 'edit_users'];
    return in_array($action, $current_user_perms);
}
  1. 在控制器中检查辅助方法并在需要时返回重定向响应:
public function index() {

    if(!has_permission('blahblah')) {
        return redirect()->route('access_denied');
    }

    // do stuff
} 

PS。我强烈建议阅读 middlewares 并使用它们而不是助手,这是实现简单权限功能的正确 Laravel 方式。

【讨论】:

  • 谢谢。但是是否可以从 Helper 本身重定向?
  • @Corner 这不是 MVC 模式的工作方式。控制器应该返回响应,而不是 Helper。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 2012-09-13
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多