【问题标题】:Laravel 5 determine if current user has permission to update a postLaravel 5 确定当前用户是否有权更新帖子
【发布时间】:2016-07-20 15:12:51
【问题描述】:

我正在关注jeffreys laravel fundamental series,但我被困在了某个时刻。

如何确保当前用户只能编辑/更新自己的文章?

我觉得我必须专注于我的 ArticleRequest 课程,但不知道在 authorize() 中告诉 laravel 做什么。

我的文章控制器:

<?php
namespace App\Http\Controllers;

use App\Article;
use Carbon\Carbon;
use App\Http\Requests\ArticleRequest;
use App\Http\Requests;
use Illuminate\Http\Request;
use Auth;

class ArticlesController extends Controller
{

public function __construct() {
  $this->middleware('auth');
}


public function index() {

  $articles = Article::latest('published_at')->published()->get();
  return view('articles.index')->withArticles($articles);
}

public function show($id) {

  $article = Article::findOrFail($id);
  //dd($article->created_at->diffForHumans());
  return view('articles.show')->withArticle($article);
}

public function create() {

  return view('articles.create');
}


public function store(ArticleRequest $request) {

  //Create new article witj the attributes from the form
  $article = new Article($request->all());
  //Get the authenticated users articles and save a new one (with passed trough $article object)
  Auth::user()->articles()->save($article);

  return redirect('articles');
}

public function edit($id) {

  $article = Article::findOrFail($id);
  return view('articles.edit')->withArticle($article);
}


public function update($id, ArticleRequest $request) {

  $article = Article::findOrFail($id);
  $article->update($request->all());
  return redirect('articles');

 }
}

文章请求:

<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;

class ArticleRequest extends Request
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {


        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {

        return [
            'title' => 'required',
            'body' => 'required',
            'published_at' => 'required|date'
        ];
    }
}

我的 ArticlesTabel 架构:

Schema::create('articles', function (Blueprint $table) {
          $table->increments('id');
          $table->integer('user_id')->unsigned();
          $table->string('title');
          $table->text('body');
          $table->timestamp('created_at');
          $table->timestamp('published_at');

          $table->foreign('user_id')
                ->references('id')
                ->on('users')
                ->onDelete('cascade');

      });

【问题讨论】:

  • 创建一个策略,然后使用授权功能将其应用到您的控制器“更新”操作中。更多关于这里的政策:laravel.com/docs/5.2/authorization#policies。建议:不要只依赖 laracast、搜索 api、文档和 web 来获得更多解决方案。

标签: php laravel


【解决方案1】:

我可以给你建议,

在我的大多数项目中,我使用 Entrust Laravel。

这里是链接:Entrust Laravel

您可以使用 composer 轻松安装:

composer require zizaco/entrust:5.2.x-dev

版本取决于您使用的 laravel 框架版本。

如果您将阅读文档,您可以看到:

class Permission extends EntrustPermission
{
}

在 App 目录中创建这个类。

在此之后您将获得刀片代码:

@permission('manage-admins')
    <p>This is visible to users with the given permissions. Gets translated to 
    \Entrust::can('manage-admins'). The @can directive is already taken by core 
    laravel authorization package, hence the @permission directive instead.</p>
@endpermission

很简单,但您必须阅读文档。

如果还有其他事情请告诉我。

【讨论】:

    【解决方案2】:

    要添加角色和权限,您可以使用 github 包 zizaco/entrust。 click here

    检查如何添加角色和权限。检查我在以下链接中给出的所有答案。

    click on link for example

    【讨论】:

      猜你喜欢
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 2019-08-12
      相关资源
      最近更新 更多