Showing results for “php”

12 results found

  • สร้าง Helpers เองใน Laravel

    Article
    Save Pongsiri 1 month ago

    อย่างที่รู้กันว่า Laravel มี helpers เริ่มต้นมาให้เราใช้กันอยู่แล้ว (ดูคู่มีได้ที่ https://laravel.com/docs/5.7/helpers)แต่บางโปรเจคเราอาจต้องสร้าง helper ขึ้นมาเอง เพื่อใช้งานกับเฉพาะบางอย่างกับโปรเจคนั้นๆ โดยแนะนำให้สร้างไฟล์ .php ไว้ที่โฟลเดอร์ app เราอาจจะตั้งชื่อไฟล์ว่า app/helpers.php ก็ได้นะจากนั้นก็ตั้งค่าให้ Laravel โหลดไฟล์นี้ก่อนทำอย่างอื่น โดยการเปิดไฟล์ composer.json แล้วหาในส่วนของ autoload จะเห็นหน้าตาประมาณนี้... "autoload": { "classmap": [ "database/seeds", "database/factories" ], "psr-4": { "App\\": "app/" } }, ...เราจะทำงานเพิ่มชื่อไฟล์ที่เราพึ่งสร้างเข้าไป... "autoload": { "files": [ "app/helpers.php" ], "classmap": [ "database/seeds", "database/factories" ], "psr-4": { "App\\": "app/" } }, ...แล้วก็ dump composer ใหม่ด้วยครับcomposer dump-autoloadตอนนี้ก็ถือว่าไฟล์ Helpers ได้ถูกต้อง autoload ไว้แล้ว เรามาก็ลองสร้าง function ไว้ที่ไฟล์ app/Helpers.php ของเรากัน ตัวอย่างด้านบนเป็น function ไว้เช็คชื่อ Route ที่กำลังเปิดอยู่ เพื่อที่เราจะเอาไปใช้ใส่ class ของ css เวลาที่จะทำให้ลิงค์นั้นมัน active (ดูว่า URL ที่กำลังเปิดอยู่มีชื่อ Route ว่า ... จริงมั้ย? ถ้าใช่ให้ return คำว่า "active" ออกมา)เอาไปใช้ที่ไฟล์ blade ได้เลยนี่เป็นตัวอย่าง helper นึงนะครับ เราสามารถสร้าง helper เองกันได้เลยโดยเพิ่ม function ไว้ที่ไฟล์ app/helpers.php นั่นแหละ (เขียนเช็คสักหน่อยว่ามีฟังก์ชั่นนี้หรือยังด้วยนะ) ที่นี่เราก็มี helpers ของตัวเองสำหรับโปรเจคของเรากันแล้ว

  • วิธีแก้ปัญหาการติดตั้ง PHP7.2 ใน macOS ไม่ได้

    Topic
    Save Pongsiri 1 month ago

    จากปัญหาที่พอจะเซ็ตให้ macOS ใช้ PHP7.2 brew link php72แล้วขึ้น Error ประมาณนี้Linking /usr/local/Cellar/php71/7.1.14_25...Error: Could not symlink sbin/php-fpm/usr/local/sbin is not writable.ให้เราลองเช็คว่ามีไฟล์นี้อยู่จริงมั้ยls /usr/local/sbin ถ้าไม่นี้เราจะเห็นข้อความนี้ls: /usr/local/sbin: No such file or directoryให้เราสร้างไฟล์ sbin และกำหนดสิทธ์ให้อยู่กลุ่ม adminsudo  mkdir -p /usr/local/sbinsudo chown -R $(whoami):admin /usr/local/sbinแล้วก็สั่ง link อีกทีนึงครับbrew link php72เรียบร้อยแล้วLinking /usr/local/Cellar/php71/7.1.14_25... 17 symlinks created** วิธีนี้อาจจะปรับใช้ได้กับ PHP เวอร์อื่นๆ

  • วิธีรัน Laravel บนแชร์โฮส แบบไม่ต้อง /public

    Topic
    Save Pongsiri 2 months ago

    เมื่อเราต้องอัปโปรเจค Laravel ของเราขึ้นไปโฮสที่เป็นแชร์โฮสที่มีโฟลเดอร์ public_html มาให้เราอัพเว็บได้อย่างเดียว สิ่งที่เราต้องทำคือ ถ้าเราสามารถอัปไฟล์นอกโฟลเดอร์ public_html ได้ เราก็อัปขึ้นไปที่โฟลเดอร์นอก public_html แล้วเปลี่ยนชื่อโฟลเดอร์ public ใน laravel เป็น public_html แทนก็ได้ แต่ถ้าเราไม่มีสิทธิ์อัปไฟล์นอกโฟลเดอร์ public_html แล้วละก็ ให้ใช้วิธีนี้เป็นวิธีสุดท้าย (เพราะความปลอดภัยมันน้อยกว่า)1. ย้ายทุกอย่างจากโฟลเดอร์ /public ออกมาอยู่ในโฟลเดอร์โปรเจค 2. เปิดไฟล์ index.php ขึ้นมา แล้วแก้ไขตามนี้require __DIR__.'/bootstrap/autoload.php';$app = require_once DIR.'/../bootstrap/app.php';

  • วิธีแก้ปัญหา SoftException writable by group

    Topic
    Save Pongsiri 5 months ago

    สำหรับใครที่ใช้ centos แล้วอัพเว็บขึ้นด้วย git พอ cloneโปรเจคมาแล้วปรากฎว่าเว็บรันไม่ได้ขึ้น internal error 500 ลองเข้าไปเช็ค error log เจอข้อความแบบนี้SoftException in Application.cpp:256: File "/home/username/public_html/index.php" is writeable by groupวิธีแก้คือ1. แก้ไขไฟล์ ~/.bash_profile เพิ่มบรรทัดนี้ลงไปumask 0222. เปลี่ยน permission ให้กับทุกไฟล์และโฟลเดอร์เป็น 755chmod -R 755

  • วิธีเซ็ต .htaccess เมื่ออัพ laravel ขึ้น cPanel

    Topic
    Save Pongsiri 5 months ago

    cPanel ใช้ apache เป็นเว็บเซิร์ฟเวอร์อยู่แล้วดังนั้นแก้ไขไฟล์ .htaccessRewriteEngine OnOptions +FollowSymLinksRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^ index.php [L]RewriteRule ^(.*)$ public/$1 [L]

  • ติดตั้ง php บน macos ด้วย brew

    Topic
    Save Pongsiri 6 months ago

    First install Brew on your MACSetup Brew: ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"brew updatebrew tap homebrew/dupesbrew tap homebrew/phpInstall PHP 7.0.+ brew install php70Install mcrypt: brew install mcrypt php70-mcryptFinally, install composer: brew install composerNow if you run $ php -v, you will get PHP 5.5 or something. This is the default PHP version that is shipped with OSX and cannot be removed. You just need to edit your path to ensure that PHP 7.0 is picked up.export PATH="$(brew --prefix homebrew/php/php70)/bin:$PATH"To debug any issue with any package, you can run brew info php70 etc.Also, if you are getting seemingly unrelated errors, make sure to update bash/zsh: brew upgrade bash and brew upgrade zsh.If everything is setup correctly, running $ php -v should give you 7.0.+.Thank! https://gist.github.com/shashankmehta/6ff13acd60f449eea6311cba4aae900a

  • Laravel วิธีตั้งค่าให้เป็น https เมื่ออยู่บน production

    Topic
    Save Pongsiri 6 months ago

    <?phpnamespace App\Providers; ...use Illuminate\Support\Facades\Schema;... class AppServiceProvider extends ServiceProvider{    /**     * Bootstrap any application services.     *     * @return void     */    public function boot()    {        ...    }    /**     * Register any application services.     *     * @return void     */    public function register()    {         if (config('app.env') == 'production') {            $this->app['url']->forceScheme('https');        }    }}

  • วิธีรัน serve ของ laravel ให้เครื่องอื่นเปิดดูได้

    Topic
    Save Pongsiri 6 months ago

    sudo php artisan serve --host 192.168.1.101 --port 80

  • วิธีแก้ปัญหา paginator หน้าอื่นๆ ไม่เป็น https ใน laravel

    Article
    Save Pongsiri 7 months ago

    กรณีนี้เกิดจาก forceSchema('https') ที่เราตั้งค่าไว้เพื่อให้เปลี่ยนทุกอย่างเป็น https มันไม่ส่งผลกับ url ใน paginator เมื่อมันมีพวก X-FORWARDED อยู่นะสิ ดังนั้นทางแก้ของเราก็คือสร้าง middleware ขึ้นมาสำหรับตั้งค่าเชื่อถือ Proxy ของเราครับตั้งชื่อไฟล์ app/Http/Middleware/HttpsProtocol.phpแล้วก็ไปบอก Kernel.php ให้รู้จักกันซะ ที่ไฟล์ app/Http/Kernel.php

  • เปิดโหมด Debug ใน wordpress

    Topic
    Save Pongsiri 7 months ago

    ตั้งค่าที่ไฟล์ wp-config.php define('WP_DEBUG', true);

  • ดึง RSS ฟีดมาแสดงใน Laravel

    Article
    Save Pongsiri 7 months ago

    ใครที่ใช้ Laravel 5 และกำลังหาวิธีดึง RSS ฟีดมาแสดงที่เว็บของเรา  วันนี้ผมขอแนะนำแพคเกจ willvincent/feeds ที่ช่วยให้คุณตอบสนองความต้องการนั้นครับติดตั้ง willvincent/feedsใช้คำสั่ง composer require ดาวน์โหลดแพจเกจ willvincent/feeds ลงในโปรเจค Laravel 5 ของเราก่อนครับ composer require willvincent/feedsแล้วก็เข้าไปเพิ่ม provider ในไฟล์ config/app.php     'providers' => [        // ...        willvincent\Feeds\FeedsServiceProvider::class,    ],และเพิ่ม faces ลงในส่วนของ aliases ในไฟล์เดียวกัน    'aliases' => [        // ...        'Feeds'    => willvincent\Feeds\Facades\FeedsFacade::class,    ],ก่อนใช้งานเราก็ต้องดึง config ของแพคเกจออกมาก่อนครับphp artisan vendor:publish --provider="willvincent\Feeds\FeedsServiceProvider"เสร็จแล้วจะไฟล์ config/feeds.php กำเนิดเกิดขึ้น (ถ้าใครไม่ขึ้นหรือรันไม่ผ่านให้ลองรันคำสั่งล้างแคชก่อนนะ php artisan config:cache)การใช้งานใน Controllerเราจะใช้งานด้วยฟังก์ชั่น make()  ซึ่ง 3 พารามิเตอร์- ลิงค์ของ RSS ถ้ามีหลายลิงค์ให้ใส่เป็น array- ตัวเลขจำนวนฟีดที่แสดงไม่เกินกี่ฟีด- บังคับอ่านไฟล์ที่ไม่ถูกรูปแบบ RSS ใส่เป็น Booleanเริ่มด้วยกันเรียกใช้งานคลาสด้วย faces ที่เราเตรียมไว้ส่วนบนๆ ของ controller เราเลยครับ ... use Feeds; class FeedsController extends Controller{     ... }    โค้ดตัวอย่างนี้ เราจะเขียน method สำหรับอ่านข้อมูลจากลิงค์ RSS มาแปลงเป็น array แล้วส่งต่อไปแสดงผลที่ View ครับ    public function news()    {        $feed = Feeds::make('https://www.thaiware.com/rss/rss_latestPost_news.php');        $data = array(          'title'     => $feed->get_title(),          'permalink' => $feed->get_permalink(),          'items'     => $feed->get_items(),        );        return view('feeds', $data);    }ในส่วนของ views/feeds.blade.php เราจะลูป Feeds จาก controller มาแสดงครับ  <h1><a href="{{ $permalink }}">{{ $title }}</a></h1>  @foreach ($items as $item)    <div class="item">       <img alt="Image" src="{{ $item->get_enclosure()->link }}">           <h2><a href="{{ $item->get_permalink() }}">{{ $item->get_title() }}</a></h2>      <p>{{ $item->get_description() }}</p>      <p><small>Posted on {{ $item->get_date('j F Y | g:i a') }}</small></p>    </div>  @endforeachปล. สามารถดูตัวอย่างผลลัพธ์ของโค้ดด้านบนได้เลยที่หน้า RSS ฟีดของไอเดียจิตอลครับ https://www.ideagital.com/news 

  • การใช้งาน Laratrust ตัวจัดการเรื่องสิทธิ์การใช้งาน (ACL)

    Article
    Save Pongsiri 8 months ago

    หลังจากบทความที่แล้วได้เขียนถึงการติดตั้ง Laratust และตั้งค่ากันเรียบร้อยแล้ว บทความนี้ก็เลยต่อเนื่องมาเขียนถึงวิธีใช้งาน Laratrust ทั้งหมดเลยครับก่อนจะไปพูดถึงการใช้งาน Laratrust สิ่งที่เราต้องรู้จักก่อนก็คือความหมายของแต่ละคำที่เราจะเจอก่อน1. Role คือ ชื่อของบทบาทหน้าที่โดยรวม เช่น admin2. Permission คือ ชื่อของสิทธิ์ที่มีในแต่ละบทบาท เช่น admin นั้นมีสิทธิ์ในการทำอะไรได้บ้าง เช่น 'create-user', 'update-post' เป็นต้น การสร้างและใช้งาน Role, Permissionการสร้าง Role$owner = new Role();$owner->name         = 'owner';$owner->display_name = 'Project Owner';$owner->description  = 'User is the owner of a given project';$owner->save(); $admin = new Role();$admin->name         = 'admin';$admin->display_name = 'User Administrator';$admin->description  = 'User is allowed to manage and edit other users';$admin->save();การสร้าง Permission $createPost = new Permission();$createPost->name         = 'create-post';$createPost->display_name = 'Create Posts';$createPost->description  = 'create new blog posts';$createPost->save(); $editUser = new Permission();$editUser->name         = 'edit-user';$editUser->display_name = 'Edit Users';$editUser->description  = 'edit existing users';$editUser->save();การเพิ่ม Permission ให้กับแต่ละ Role$admin->attachPermission($createPost);//หรือ $admin->permissions()->attach([$createPost->id]); $owner->attachPermissions([$createPost, $editUser]);//หรือ $owner->permissions()->attach([$createPost->id, $editUser->id]); $owner->syncPermissions([$createPost, $editUser]);//หรือ $owner->permissions()->sync([$createPost->id, $editUser->id]);การลบ Permission ออกจาก Role$admin->detachPermission($createPost);//หรือ $admin->permissions()->detach([$createPost->id]); $owner->detachPermissions([$createPost, $editUser]);//หรือ $owner->permissions()->detach([$createPost->id, $editUser->id]);การเพิ่ม Role ให้กับ User แต่ละคน$user->attachRole($admin);//หรือ $user->roles()->attach([$admin->id]); $user->attachRoles([$admin, $owner]);//หรือ $user->roles()->attach([$admin->id, $owner->id]); $user->syncRoles([$admin->id, $owner->id]);//หรือ $user->roles()->sync([$admin->id, $owner->id]); $user->syncRolesWithoutDetaching([$admin->id, $owner->id]);//หรือ $user->roles()->syncWithoutDetaching([$admin->id, $owner->id]);การลบ Role ออกจาก User แต่ละคน$user->detachRole($admin);//หรือ $user->roles()->detach([$admin->id]); $user->detachRoles([$admin, $owner]);//หรือ $user->roles()->detach([$admin->id, $owner->id]);การเพิ่ม Permission ให้กับ User แต่ละคน$user->attachPermission($editUser);//หรือ $user->permissions()->attach([$editUser->id]); $user->attachPermissions([$editUser, $createPost]);//หรือ $user->permissions()->attach([$editUser->id, $createPost->id]); $user->syncPermissions([$editUser->id, $createPost->id]);//หรือ $user->permissions()->sync([$editUser->id, createPost->id]); $user->syncPermissionsWithoutDetaching([$editUser, $createPost]);//หรือ $user->permissions()->syncWithoutDetaching([$createPost->id, $editUser->id]);การลบ Permission ออกจาก User แต่ละคน$user->detachPermission($createPost);//หรือ $user->roles()->detach([$createPost->id]); $user->detachPermissions([$createPost, $editUser]);//หรือ $user->roles()->detach([$createPost->id, $editUser->id]);การเช็ค Role และสิทธิ์ของผู้ใช้แต่ละคนให้ใช้ method จากตัวแปล $user ที่เราต้อง หรือ auth() ที่กำลัง login อยู่ตามตัวอย่าง$user->hasRole('owner');   // false$user->hasRole('admin');   // true $user->can('edit-user');   // false$user->can('create-post'); // trueทั้ง can() และ hasRole() สามารถเช็คทีเดียวได้หลายค่าด้วยอาเรย์ครับ$user->hasRole(['owner', 'admin']);       // true$user->can(['edit-user', 'create-post']); // true $user->hasRole('owner|admin');       // true$user->can('edit-user|create-post'); // trueและถ้าเราต้องการให้เช็คว่าต้องเข้าเงื่อนไขทั้งหมดเลยก็ให้เติม true ลงไปในพารามิเตอร์ที่ 2$user->hasRole(['owner', 'admin']);             // true$user->hasRole(['owner', 'admin'], true);       // false, กรณี user ไม่ได้เป็น admin $user->can(['edit-user', 'create-post']);       // true$user->can(['edit-user', 'create-post'], true); // false, กรณี user ไม่มีสิทธิ์ edit-userที่พิเศษกว่านั้นคือเราสามารถเช็คแบบกว้าง ๆ ได้แบบนี้ด้วย// match any admin permission$user->can('admin.*'); // true // match any permission about users$user->can('*_users'); // trueและ can() สามารถเรียกแบบสวยแบบนี้ก็ได้$user->canCreateUsers();// เหมือนกับ $user->can('create-users');เช็คด้วย ability()ฟังก์ชั่นนี้ใช้เช็ครวดเดียวเลยทั้ง Role, Permission ของผู้ใช้ การใช้งานมี 3 พารามิเตอร์ คือ (roles, permissions, options)โดยเราสามารถเช็คได้หลายเงื่อนไขด้วยการใช้ | ในการแบ่งคำ หรือเขียนแบบอาเรย์ก็ได้$user->ability(['admin', 'owner'], ['create-post', 'edit-user']);// หรือ$user->ability('admin|owner', 'create-post|edit-user');พารามิเตอร์ที่ 3 เป็นอาเรย์ options $options = [    'validate_all' => true | false (Default: false),    'return_type'  => boolean | array | both (Default: boolean)];- validate_all    คือต้องเข้าเงื่อนไขทั้งหมด (ค่าเริ่มต้นเป็น false)- return_type    เซ็ตว่าจะให้ return ค่ากลับมาเป็นแบบ boolean หรือ array (ค่าเริ่มต้นเป็น boolean)ตัวอย่างการใช้งาน$options = [    'validate_all' => true,    'return_type' => 'both']; list($validate, $allValidations) = $user->ability(    ['admin', 'owner'],    ['create-post', 'edit-user'],    $options); var_dump($validate);// bool(false) var_dump($allValidations);// array(4) {//     ['role'] => bool(true)//     ['role_2'] => bool(false)//     ['create-post'] => bool(true)//     ['edit-user'] => bool(false)// }การเรียกข้อมูลที่สัมพันธ์กันถ้าเราต้องการดึงสิทธิ์ของ user มาทั้งหมด สามารถทำได้โดยใช้เมธอด allPermissions จะได้ permission ทั้งหมดที่ user คนนั้นมีจากทุก roles ด้วยdump($user->allPermissions());/* Illuminate\Database\Eloquent\Collection {#646  #items: array:2 [    0 => App\Permission {#662      ...      #attributes: array:6 [        "id" => "1"        "name" => "edit-users"        "display_name" => "Edit Users"        "description" => null        "created_at" => "2017-06-19 04:58:30"        "updated_at" => "2017-06-19 04:58:30"      ]      ...    }    1 => App\Permission {#667      ...      #attributes: array:6 [        "id" => "2"        "name" => "manage-users"        "display_name" => "Manage Users"        "description" => null        "created_at" => "2017-06-19 04:58:30"        "updated_at" => "2017-06-19 04:58:30"      ]      ...    }  ]} */ถ้าเราต้องการดูรายชื่อ user ที่มี role บางอย่าง เช่น admin สามารถทำได้โดยการใช้ query scope ชื่อ whereRoleIs()$users = User::whereRoleIs('admin')->get();ดู user ที่มี permissions บางอย่างได้ด้วยเช่นกัน ด้วย scope ชื่อ wherePermissionIs()$users = User::wherePermissionIs('edit-user')->get();เช็คว่าเป็นเจ้าของมั้ยสมมติว่าต้องการเช็คว่า user นี้เป็นเจ้าของ post ที่จะแก้ไขหรือเปล่า ก็สามารถทำได้ครับ โดยใช้ฟังก์ชั่น owns()public function update (Post $post) {    if ($user->owns($post)) { //บรรทัดนี้จะตรวจว่ามี 'user_id' อยู่ใน $post หรือไม่       abort(403);    }    ...}ถ้าในตาราง posts เราใช้ key ของเจ้าของเป็นชื่ออื่นที่ไม่ใช่ user_id เราสามารถระบุชื่อ filed ของเราเองในแอททรีบิวต์ที่ 2$user->owns($post, 'idUser');เช็คสิทธิ์และความเป็นเจ้าของถ้าเราต้องการเช็คสิทธ์พร้อมกับเช็คด้วยว่า user เป็นเจ้าของ object นั้นหรือเปล่า เราสามารถทำได้โดยการใช้ method ชื่อว่า canAndOwns และ hasRoleAndOwnsทั้ง 2 method จะมี 3 พารามิเตอร์- permission หรือ role คือเช็คว่ามีสิทธิ์หรือมี role นั้นมั้ย (เช็คหลายเงื่อนไขก็ใช้เป็นอาเรย์)- thing คือ object ที่ใช้เพื่อเช็คความเป็นเจ้าของ- options จะใช้กรณีที่ต้องการเช็คทั้งหมดหรือการเปลี่ยนชื่อ foreign key ที่ใช้เช็คนี่คือตัวอย่างการใช้งานทั้ง 2 method$post = Post::find(1);$user->canAndOwns('edit-post', $post);$user->canAndOwns(['edit-post', 'delete-post'], $post);$user->canAndOwns(['edit-post', 'delete-post'], $post, ['requireAll' => false, 'foreignKeyName' => 'writer_id']); $user->hasRoleAndOwns('admin', $post);$user->hasRoleAndOwns(['admin', 'writer'], $post);$user->hasRoleAndOwns(['admin', 'writer'], $post, ['requireAll' => false, 'foreignKeyName' => 'writer_id']);คลาสของ Laratrust มีทางลัดที่จะใช้กับ method อย่าง owns(), canAndOwns และ hasRoleAndOwns เพื่อเช็คกับผู้ใช้ที่เข้าใช้งานอยู่ตอนนี้ได้Laratrust::owns($post);Laratrust::owns($post, 'idUser');Laratrust::canAndOwns('edit-post', $post);Laratrust::canAndOwns(['edit-post', 'delete-post'], $post, ['requireAll' => false, 'foreignKeyName' => 'writer_id']);Laratrust::hasRoleAndOwns('admin', $post);Laratrust::hasRoleAndOwns(['admin', 'writer'], $post, ['requireAll' => false, 'foreignKeyName' => 'writer_id']);Teamsสำหรับวิธีการกำหนด Roles และการลบ Roles ของแบบ team ก็ใช้ method เดียวกับของ user เลยครับ แต่เราต้องระบุพารามิเตอร์สำหรับของ team เพิ่มเข้าไปด้วย$team = Team::where('name', 'my-awesome-team')->first();$admin = Role::where('name', 'admin')->first(); $owner = Role::where('name', 'owner')->first(); $user->attachRole($admin, $team); //กำหนดทีละ Role $user->attachRole([$admin, $owner], $team); //กำหนดแบบหลาย Role // พารามิเตอร์สามารถใส่เป็น object, array หรือชื่อ Role เลยก็ได้จากตัวอย่างด้านบน เป็นการตั้งให้ user เป็น admin แต่อยู่เฉพาะในทีม "my-awesome-team" เท่านั้น (เราสามารถตั้งให้ user เป็นได้หลาย role โดยการใส่พารามิเตอร์ role แบบอาเรย์)การลบ role สามารถทำได้โดยใช้ method ที่ว่า detachRole สำหรับลบทีละ Role และ detachRoles สำหรับหลายลบที่เดียวหลาย Role$user->detachRole($admin, $team); $user->detachRoles([$admin, $owner], $team); // พารามิเตอร์สามารถใส่เป็น object, array หรือชื่อ Role เลยก็ได้และเราสามารถซิงค์ Roles ภายในทีมได้ด้วย$user->syncRoles([$admin, $owner], $team);เพิ่มและลบ Permission ภายในทีมในทีมเช่นเดียวกับการให้สิทธิ์และลบของ User แค่เพิ่มพารามิเตอร์ระบุว่าเป็นทีมอะไรเข้าไป$team = Team::where('name', 'my-awesome-team')->first();$editUser = Permission::where('name', 'edit-user')->first(); $user->attachPermission([$editUser], $team); //สามารถใส่ได้หลายสิทธิ์โดยการระบุเป็นอาเรย์การลบ Permission ภายทีม$user->detachPermission($editUser, $team); //ลบทีละสิทธิ์$user->detachPermissions([$editUser, $manageUsers], $team); //ลบหลายสิทธิ์ทีเดียวการซิงค์ Permission ภายในทีม$user->syncPermissions([$editUser, $manageUsers], $team);เช็ค Role ในทีม$user->hasRole('admin', 'my-awesome-team');$user->hasRole(['admin', 'user'], 'my-awesome-team', true);เช็ค Permission ในทีม$user->can('edit-user', 'my-awesome-team');$user->can(['edit-user', 'manage-users'], 'my-awesome-team', true);เช็คความสามารถของ user ในทีม$options = [    'requireAll' => true | false (Default: false),    'foreignKeyName'  => 'canBeAnyString' (Default: null)]; $user->ability(['admin'], ['edit-user'], 'my-awesome-team');$user->ability(['admin'], ['edit-user'], 'my-awesome-team', $options);เช็ค Permission, Roles และ ความเป็นเจ้าของในทีม$options = [    'team' => 'my-awesome-team',    'requireAll' => false,    'foreignKeyName' => 'writer_id']; $post = Post::find(1);$user->canAndOwns(['edit-post', 'delete-post'], $post, $options);$user->hasRoleAndOwns(['admin', 'writer'], $post, $options);ใช้งาน Middlewareเราสามารถใช้ middleware ในการกรอง route เดี่ยว และกลุ่มของ route ด้วย permission, roles หรือ ability มาดูตัวอย่างกันเลยRoute::group(['prefix' => 'admin', 'middleware' => ['role:admin']], function() {    Route::get('/', '[email protected]');    Route::get('/manage', ['middleware' => ['permission:manage-admins'], 'uses' => '[email protected]']);});การใช้ | เพื่อระบุว่าเป็นอย่างใดอย่างหนึ่ง'middleware' => ['role:admin|root']// $user->hasRole(['admin', 'root']); 'middleware' => ['permission:edit-post|edit-user']// $user->hasRole(['edit-post', 'edit-user']);ต้องการให้ตรงทุกเงื่อนไขโดยเพิ่ม require_all 'middleware' => ['role:owner|writer,require_all']// $user->hasRole(['owner', 'writer'], true); 'middleware' => ['permission:edit-post|edit-user,require_all']// $user->can(['edit-post', 'edit-user'], true);หรือถ้าต้องการเช็คแบบซับซ้อนให้ใช้ ability โดยมาระบุค่า 3 พารามิเตอร์ได้แก่ roles, permissions และ options'middleware' => ['ability:admin|owner,create-post|edit-user,require_all']// $user->ability(['admin', 'owner'], ['create-post', 'edit-user'], true)ถ้าต้องการให้ middleware เช็คสำหรับภายในทีม 'middleware' => ['role:admin|root,my-awesome-team,require_all']// $user->hasRole(['admin', 'root'], 'my-awesome-team', true); 'middleware' => ['permission:edit-post|edit-user,my-awesome-team,require_all']// $user->hasRole(['edit-post', 'edit-user'], 'my-awesome-team', true); 'middleware' => ['ability:admin|owner,create-post|edit-user,my-awesome-team,require_all']// $user->ability(['admin', 'owner'], ['create-post', 'edit-user'], 'my-awesome-team', true); การ return ค่าของ Middlewareเราสามารถตั้งค่าที่ไฟล์ config/laratrust.php ซึ่งจะมีก 2 ประเภทคือAbort  คือจะ return เป็น code 403 (ค่าเริ่มต้น)Redirect ให้ไปที่หน้าอื่น เราสามารถตั้งค่าหน้าที่จะให้ redirect ไปด้วยการตั้งค่า'middleware_handling' => 'redirect','middleware_params'   => '/home',       // เปลี่ยนเป็น route ที่ต้องการได้เลยSoft Deletingสำหรับวิธีการที่เราจะลบ Role ออกนั้น แนะนำว่าไม่ควรลบแบบถาวร forceDelete() เลยทันทีนะ เพราะว่า role นั้นหายไปก็จริง แต่ข้อมูล Permission ที่เกี่ยวข้องกับ role นั้น และ user ที่มี role นั้นยังคงอยู่ และไม่เป็นเรื่องดีแน่ถ้ามีการเรียกใช้ข้อมูลจาก permission หรือ user ขึ้นมาแล้วปรากฎว่า role นั้นหายไปแล้ว มันก็จะ error และอีกอย่างข้อมูลขยะใน database ก็จะเยอะด้วยดังนั้นควรจะเราแบบปกติก่อน แล้วตามลบข้อมูลที่สัมพันธ์กัน จากนั้นถึงลบถาวรได้ ตามตัวอย่างนี้ครับ$role = Role::findOrFail(1); // ลบแบบปกติ$role->delete(); // ลบทุกข้อมูลที่สัมพันธ์กัน$role->users()->sync([]);$role->permissions()->sync([]); // ลบแบบถาวร$role->forceDelete();ตัวอย่างการใช้งานใน Blade Templatesการใช้งานจะเหมือนกันเราใช้ @if แต่เขียนในแบบย่อ เช่น ถ้าต้องการให้แสดงเฉพาะคนที่มี role ที่กำหนด@role('admin')[email protected] ถ้าต้องการให้แสดงเฉพาะคนที่มี permission ที่กำหนด @permission('manage-admins')[email protected] ถ้าต้องการให้แสดงเฉพาะคนที่มีความสามารถตามเงื่อนไข @ability('admin,owner', 'create-post,edit-user')[email protected] ถ้าต้องการให้แสดงเฉพาะคนที่มี permission ที่กำหนด และเป็นเจ้าของ object นั้นด้วย @canAndOwns('edit-post', $post)[email protected] ถ้าต้องการให้แสดงเฉพาะคนที่มี role ที่กำหนด และเป็นเจ้าของ object นั้นด้วย @hasRoleAndOwns('admin', $post)[email protected]และนี่ก็คือทั้งหมดของแพคเกจ Laratrust ครับ เป็นบทความที่ยาวที่สุดเคยเขียนมา อาจมีการเรียบเรียงบกพร่องไปบ้าง แต่จะพยายามปรับปรุงให้กระชับอ่านง่ายขึ้นนะครับ หากผิดพลาดก็ขออภัย หากถูกใจก็ขอขอบคุณนะครับ :)