国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

Laravel Policy 使用

曹金海 / 2007人閱讀

摘要:提供更簡(jiǎn)單的方式來(lái)處理用戶(hù)授權(quán)動(dòng)作。類(lèi)似用戶(hù)認(rèn)證,有種主要方式來(lái)實(shí)現(xiàn)用戶(hù)授權(quán)和策略,我這里主要講解下策略的使用。文檔上面有詳細(xì)的說(shuō)明,我這里只根據(jù)自己使用過(guò)程做一個(gè)簡(jiǎn)單的筆記。

Laravel 提供更簡(jiǎn)單的方式來(lái)處理用戶(hù)授權(quán)動(dòng)作。類(lèi)似用戶(hù)認(rèn)證,有 2 種主要方式來(lái)實(shí)現(xiàn)用戶(hù)授權(quán):gates 和策略,我這里主要講解下策略的使用。

文檔 上面有詳細(xì)的說(shuō)明,我這里只根據(jù)自己使用過(guò)程做一個(gè)簡(jiǎn)單的筆記。

例子:我這里準(zhǔn)備用編輯文章授權(quán)來(lái)做演示,在這個(gè)權(quán)限中,只有文章所有者可以編輯,來(lái)體驗(yàn)一下 Policy 如何實(shí)現(xiàn)它。

準(zhǔn)備工作

安裝 laravel

composer create-project --prefer-dist laravel/laravel laravel-vue "5.5.*"

建表

php artisan make:migration posts --create=posts

Schema::create("posts", function (Blueprint $table) {
  $table->increments("id");
  $table->string("title", 200);
  $table->text("content");
  $table->timestamps();
  $table->index("user_id");
});

創(chuàng)建 Model

php artisan make:model PostModel

# app/PostModel.php
namespace AppModels;

use IlluminateDatabaseEloquentModel;

class PostModel extends Model
{
  protected $table = "posts";
  protected $fillable = ["title", "content", "user_id"];
}
生成策略

策略其實(shí)就是授權(quán)方案所對(duì)應(yīng)的類(lèi)文件,它在 app/Policies 目錄下面,下面我用命令創(chuàng)建一個(gè)策略文件。

php artisan make:policy PostPolicy

命令執(zhí)行完畢之后,會(huì)生成 app/Policies/PostPolicy.php 文件,下面我們開(kāi)始編輯它。

# app/Policies/PostPolicy.php
namespace AppPolicies;

use AppUser;
use AppPostModel;
use IlluminateAuthAccessHandlesAuthorization;

class TopicPolicy
{
  use HandlesAuthorization;

  public function create(User $user)
  {
    // code
  }

  public function update(User $user, PostModel $postModel)
  {
    return $user->id  === $postModel->user_id;
  }

  public function delete(User $user, PostModel $postModel)
  {
    // code
  }
}
注冊(cè)策略

授權(quán)策略需要注冊(cè)才能使用,在什么地方注冊(cè)呢?laravel5.5AuthServiceProvider 中包含一個(gè) policies 的屬性,這里面注冊(cè)策略,下面我們看下如何注冊(cè)。

# app/Providers/AuthServiceProvider.php

namespace AppProviders;

use IlluminateSupportFacadesGate;
use IlluminateFoundationSupportProvidersAuthServiceProvider as ServiceProvider;

user AppPostModel;
use AppPoliciesPostPolicy;

class AuthServiceProvider extends ServiceProvider
{
  protected $policies = [
    PostModel::class => PostPolicy::class,  // 注意在這里注冊(cè) policy
  ];

  public function boot()
  {
    $this->registerPolicies();
  }
}
使用策略

注冊(cè)完畢之后,在 User 模型中有 cancant 方法來(lái)使用策略,如在 PostController 編輯時(shí)使用:

# app/Http/Controllers/PostController.php

public function create() {
  if (Auth::user()->can("create", PostModel)) { // 注意這里的用法
    // 可以創(chuàng)建
  } else {
    // 無(wú)權(quán)限
  }
}

public function update(Request $request) {
  $id = $request->input("id");
  $post = PostModel::findOrFail($id);
  if (Auth::user()->can("update", $post)) {
    // 可以編輯
  } else {
    // 無(wú)編輯權(quán)限
  }
}

如果你想超級(jí)管理員也擁有編輯權(quán)限的話(huà),可以在定義策略的時(shí)候加上策略過(guò)濾器,也就是一個(gè) before 方法:

# app/Policies/PostPolicy.php
public function before($user, $ability)
{
  if ($user->isSuperAdmin()) {
    return true;
  }
}

# app/User.php
public function isSuperAdmin()
{
  // 定義ID為1為超級(jí)管理員
  if ($this->id == 1) {
    return true;
  }
  return false;
}

balde 模板中使用 @can@cannot方法來(lái)判斷

@can("create", AppPostModel::class)
  創(chuàng)建
@endcan

@can("update", $post)
  編輯
@endcan

好了,這次就寫(xiě)到這里,希望此篇筆記能幫助到你。

原文地址

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/28492.html

相關(guān)文章

  • Laravel 5.8 正式發(fā)布(文檔翻譯已啟動(dòng))

    摘要:現(xiàn)在面向所有人正式發(fā)布了。并且有計(jì)劃將作為可選擴(kuò)展包發(fā)布,你仍然可以在項(xiàng)目中使用它們。是最新的穩(wěn)定版本,將在年月左右處理收到的錯(cuò)誤修復(fù)和更新,并在年月左右之前進(jìn)行安全修復(fù)。中文翻譯中文翻譯已啟動(dòng),請(qǐng)關(guān)注更多翻譯文章請(qǐng)見(jiàn)開(kāi)發(fā)者社區(qū) showImg(https://segmentfault.com/img/remote/1460000018318895?w=1680&h=859); Lar...

    hankkin 評(píng)論0 收藏0
  • PHP -Casbin: 支持 ACL、RBAC、ABAC 多種模型的 PHP 權(quán)限管理框架

    摘要:是一個(gè)用語(yǔ)言打造的輕量級(jí)開(kāi)源訪問(wèn)控制框架,目前在開(kāi)源。采用了元模型的設(shè)計(jì)思想,支持多種經(jīng)典的訪問(wèn)控制方案,如基于角色的訪問(wèn)控制基于屬性的訪問(wèn)控制等。 showImg(https://segmentfault.com/img/bVbkDJf?w=500&h=220); PHP-Casbin 是一個(gè)用 PHP 語(yǔ)言打造的輕量級(jí)開(kāi)源訪問(wèn)控制框架( https://github.com/php...

    rainyang 評(píng)論0 收藏0
  • laravel開(kāi)發(fā)擴(kuò)展記錄

    摘要:自動(dòng)代碼擴(kuò)展開(kāi)發(fā)時(shí)遵守的代碼風(fēng)格是項(xiàng)目開(kāi)發(fā)規(guī)范。遵照此規(guī)范,在實(shí)際操作中,有許多重復(fù),接下來(lái)推薦一款專(zhuān)為此規(guī)范量身定制的代碼生成器。可以利用此擴(kuò)展來(lái)快速構(gòu)建項(xiàng)目原型。后續(xù)還會(huì)為大家?guī)?lái)一些最新的技術(shù)擴(kuò)展。 whoops 錯(cuò)誤提示擴(kuò)展 whoops 是一個(gè)非常優(yōu)秀的 PHP Debug 擴(kuò)展,它能夠使你在開(kāi)發(fā)中快速定位出錯(cuò)的位置。laravel默認(rèn)安裝。showImg(https://s...

    fancyLuo 評(píng)論0 收藏0
  • laravel開(kāi)發(fā)擴(kuò)展記錄

    摘要:自動(dòng)代碼擴(kuò)展開(kāi)發(fā)時(shí)遵守的代碼風(fēng)格是項(xiàng)目開(kāi)發(fā)規(guī)范。遵照此規(guī)范,在實(shí)際操作中,有許多重復(fù),接下來(lái)推薦一款專(zhuān)為此規(guī)范量身定制的代碼生成器。可以利用此擴(kuò)展來(lái)快速構(gòu)建項(xiàng)目原型。后續(xù)還會(huì)為大家?guī)?lái)一些最新的技術(shù)擴(kuò)展。 whoops 錯(cuò)誤提示擴(kuò)展 whoops 是一個(gè)非常優(yōu)秀的 PHP Debug 擴(kuò)展,它能夠使你在開(kāi)發(fā)中快速定位出錯(cuò)的位置。laravel默認(rèn)安裝。showImg(https://s...

    魏憲會(huì) 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<