【问题标题】:Create middleware for admin user with laravel使用 laravel 为管理员用户创建中间件
【发布时间】:2016-03-18 16:49:58
【问题描述】:

我构建了一个简单的应用程序,我有用户,但有些用户需要有管理员权限,所以我尝试创建这个:

  1. 首先在迁移文件中添加布尔类型 - 管理员:

    公共函数 up()

     {
            Schema::create('users', function (Blueprint $table) {
                $table->increments('id');
                $table->boolean('admin');
                $table->string('username');
                $table->string('email')->unique();
                $table->string('password', 60);
                $table->rememberToken();
                $table->timestamps();
            });
        }
    

之后我创建了新的中间件:

class RedirectIfNotAManager
{

    public function handle($request, Closure $next)
    {
        if (! $request->user()->IsATeamManager()){

            return redirect('articles');

        }
        return $next($request);
    }
}

offcource 现在我需要在用户模型文件中创建函数 IsATeamManager():

public function IsATeamManager(){
        if ($this->is('admin') {
            return true;
        }
        return false;

    }

在 Kernel.php 我添加管理器:

 protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'manager' => \App\Http\Middleware\RedirectIfNotAManager::class,

    ];

在我添加的路线上:

Route::get('foo', ['middleware'=>'manager', function(){

    return 'This Page is Only for Managers';

}]);

在 phpMyAdmin 手动更改“1”处某些用户的用户管理列...我以该用户身份登录,

但是当我尝试访问时:localhost:8888/foo 我得到了这个错误:

Builder.php 第 2071 行中的 BadMethodCallException:调用未定义 方法 Illuminate\Database\Query\Builder::is()

我还尝试在我提出请求时检查经过身份验证的用户管理员所以我写:

public function store(Requests\ArticleRequest $request)
    {
        $article = new Article($request->all());

        Auth::user()->is('admin')->articles()->save($article);

        return redirect('articles');
    }

但这不起作用,我不知道为什么...所以我的要求是,如果经过身份验证的用户的管理列为 true,则保存文章...

你有什么建议?如何在我的应用中实现用户管理?

【问题讨论】:

  • 看起来您的用户模型没有is 函数。
  • 但是'is'是内置函数?
  • 为什么要重新发明轮子?看看EntrustRoles
  • 您为什么认为添加Request 会起作用?它的is 函数与角色没有任何关系。你需要编写自己的自己的角色系统,使用自己的is函数,或者安装一个包。

标签: php laravel authentication routes middleware


【解决方案1】:

我认为你应该替换这个:

Auth::user()->is('admin')->articles()->save($article);

用这个:

Auth::user()->where('admin', 1)->articles()->save($article);

【讨论】:

  • 嗯,不,我试试这个: public function index() { $articles = Auth::user()->where('admin', 1)->articles()->latest( )->get();返回视图('articles.index',紧凑('articles'));但我得到这个错误:BadMethodCallException in Builder.php line 2071: Call to undefined method Illuminate\Database\Query\Builder::articles() ...我使用 laravel 5.1 版本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多