シェア
//Hướng dẫn xây dựng “Simple ACL” Trong Laravel

Hướng dẫn xây dựng “Simple ACL” Trong Laravel

Việc xác thực của Laravel (authentication) cung cấp 1 giải pháp đơn giản hóa cho việc đăng ký, đăng nhập, đăng xuất, và reset mật khẩu cũng như triển khai nó một cách nhanh chóng và dễ dàng hơn cho ứng dụng web.

Tuy nhiên nếu bạn cần kiểm soát quyền truy cập vào một số phần của trang web, hoặc bật tắt từng phần cụ thể của một trang cho người không phải quản trị viên, hoặc đảm bảo một người nào đó chỉ có thể chỉnh sửa danh bạ của riêng mình, bạn cần xây dựng ACL: Access Control Lists trên laravel (từ version Laravel 5.1.11 trở đi).

Để xây dựng 1 ACL cho ứng dụng chúng ta dùng Class Gate đã được xây dựng sẵn và tích hợp vào các phiên bản laravel từ 5.1.11 trở đi. Class Gate cho phép bạn kiểm tra một user (hoặc người sử dụng đang đăng nhập hoặc một người dùng cụ thể nào đó)  là “được phép” để làm một điều gì đó. Chúng ta cùng xem code mẫu bên dưới:
if (Gate::denies(‘update-contact’, $contact)) {
abort(403);
}
Bỏ code trên vào controller của bạn và kiểm tra user đang đăng nhập có bị từ chối quyền update-contact hay không, chúng ta có thể dùng Gate::allows để làm việc ngược lại.

ACL của laravel xây dựng dựa trên khái kiệm “Ability“. 1 Ability là 1 key (vd update-contact).

ĐỊNH NGHĨA 1 Ability CHO ACL

Định nghĩa 1 “Ability” trong vị trí mặc định, AuthServiceProvider.

class AuthServiceProvider extends ServiceProvider
{
public function boot(GateContract $gate)
{
parent::registerPolicies($gate);
$gate->define(‘update-contact’, function ($user, $contact) {
return $user->id === $contact->user_id;
});
}}

Và kiểm tra

if (Gate::denies('update-contact', $contact)) {
    abort(403);
}

1 khái niệm khác chúng ta nên tham khảo là Policies, thay vì phải viết trực tiếp quá nhiều các định nghĩa vào AuthServiceProvider, chúng ta có thể xây dựng tập hợp nhiều class Policies.

Chạy command line
php artisan make:policy ContactPolicy

sẽ tự động tạo file ContactPolicy vào folder  app/Policies với nội dung được tạo tự động.

<?php

namespace App\Policies;

class ContactPolicy
{
    /**
     * Create a new policy instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }
     //viết thêm phương thức update
    public function update($user, $contact)
    {
        return $user->id === $contact->user_id;
    }
}

Chúng ta đăng ký class vào AuthServiceProvider 

class AuthServiceProvider extends ServiceProvider
{
    protected $policies = [
        Contact::class => ContactPolicy::class,
    ];

và bây giờ chúng ta có thể đặt vào controller để kiểm tra

if (Gate::denies('update', $contact)) {
    abort(403);
}

今すぐ応募







    福利厚生

    給料・ボーナス制度

    社員の感情・願望を理解しているので、リバークレーンベトナムは特に年2回の定期昇給制度を設けています。毎年6月と12月に評価を行い、毎年1月と7月に給与が変更されます。また、社員は月次と年次の優秀な個人には定期的な業績賞与が別で支給されます。

    日本研修制度

    世界中の新しい技術分野に触れるために、社員を日本にオンサイトさせる方針があります。さらに、技術分野か管理分野かのキャリアパスは社員の決定次第です。

    毎年社員旅行

    リバークレイン・ベトナムは、スタッフに挑戦の機会を提供するだけでなく、年に一度の魅力的な旅行で彼らを楽しませています。エキサイティングなガラディナーやチームビルディングゲームは、リバークレインのメンバー同士の絆をさらに深める手助けをします。

    リバークレイン イベント

    チームビルディング・ファミリーデー・お夏休み・中秋節などのイベントはチーム内のメンバーが接続出来るしお互いに自分のことを共有出来る機会です。ご家族員に連携する際にはそれも誇りに言われています。

    社会保険制度

    リバークレーンベトナムは従業員に社会保険、医療保険、失業手当などの社会保険制度があります。当社は、これらの保険に関するあらゆる手続きをスタッフに必ずサポートしています。さらに、他の保険契約も考慮され、検討されています。

    他福利

    社員向けの活動をサポートすることもあります。 ・文化・芸術・スポーツクラブの運営費用 ・技術研究の教科書を購入する金額 ・エンジニア試験・言語能力試験を受験料 ・ソフトスキルのセミナー・コースの参加費 ・等 また会社政策通り、他のベネフィットもあります。

    © 2012 RiverCrane Vietnam. All rights reserved.

    Close