CoderFunda
  • Home
  • About us
    • Contact Us
    • Disclaimer
    • Privacy Policy
    • About us
  • Home
  • Php
  • HTML
  • CSS
  • JavaScript
    • JavaScript
    • Jquery
    • JqueryUI
    • Stock
  • SQL
  • Vue.Js
  • Python
  • Wordpress
  • C++
    • C++
    • C
  • Laravel
    • Laravel
      • Overview
      • Namespaces
      • Middleware
      • Routing
      • Configuration
      • Application Structure
      • Installation
    • Overview
  • DBMS
    • DBMS
      • PL/SQL
      • SQLite
      • MongoDB
      • Cassandra
      • MySQL
      • Oracle
      • CouchDB
      • Neo4j
      • DB2
      • Quiz
    • Overview
  • Entertainment
    • TV Series Update
    • Movie Review
    • Movie Review
  • More
    • Vue. Js
    • Php Question
    • Php Interview Question
    • Laravel Interview Question
    • SQL Interview Question
    • IAS Interview Question
    • PCS Interview Question
    • Technology
    • Other

24 April, 2021

Bouncer a Laravel Package for Role and Ability Authorization

 Programing Coderfunda     April 24, 2021     Packages, php     No comments   

Bouncer a Laravel Package for Role and Ability Authorization


Bouncer is an authorization package by Joseph Silber which allows role and ability checks at Laravel’s authorization gate. The package is described as follows:

Bouncer provides a mechanism to handle roles and abilities in Laravel’s ACL. With an expressive and fluent syntax, it stays out of your way as much as possible: use it when you want, ignore it when you don’t.

Bouncer makes it trivial to quickly create roles and abilities with a fluent API that creates them automatically.

Bouncer::allow('admin')->to('ban-users');

You can optionally add the HasRolesAndAbilities trait to the User model. This trait allows you to assign roles and abilities, and check them with in the model.

use Silber\Bouncer\Database\HasRolesAndAbilities;

class User extends Authenticatable
{
use Notifiable,
HasRolesAndAbilities;
}

When you assign a role that hasn’t been created yet, Bouncer will do it automatically.

$user->assign('admin');

As a quick example, imagine a database seeder that creates a few roles with Bouncer and assigns users to a role using the HasRolesAndAbilities trait.

public function run()
{
\Bouncer::allow('admin')->toManage(Post::class);
\Bouncer::allow('editor')->to('update', \App\Post::class);

$admin = factory(App\User::class)->create([
'email' => 'admin@example.com'
]);

$admin->assign('admin');

$editor = factory(App\User::class)->create([
'email' => 'editor@example.com'
]);

$editor->assign('editor');

factory(App\User::class)->create([
'email' => 'user@example.com'
]);
}

The database seeder conveniently creates two roles: admin and editor. The admin will have permission to all post abilities on the App\Post model. The editor role only has the update ability.

With the above roles, abilities, and users, we can define a route and protect updating a Post using Laravel’s Authorize middleware.

Route::get('/posts/{post}', 'PostsController@show')
->name('post.update')
->middleware('can:update,post');

Both authenticated administrators and editors will be able to see a post, guests will be redirected to login, and authenticated users lacking the update ability will get a 403 Forbidden response.

In the view, you can use Laravel’s @can directive to check for abilities and Bouncer will intercept the check and authorize it if an ability has been granted to the user.

@can ('update', $post)
<a href="{{ route('post.update', $post) }}">Edit Post</a>
@endcan

Not only can you grant user abilities through roles, but you can also assign an ability directly to a user.

$post = \App\Post::first();
$normalUser = \App\User::find('email', 'user@example.com')->first();

// Only update a specific post, perhaps one this user submitted.
$normalUser->allow('update', $post)

// Ability to update all posts directly on a user
$normalUser->allow('update', \App\Post::class);

Bouncer provides methods for checking user roles, but the Bouncer documentation warns against role checking directly:

Generally speaking, you should not have a need to check roles directly. It is better to allow a role certain abilities, then check for those abilities instead. If what you need is very general, you can create very broad abilities. For example, an access-dashboard ability is always better than checking for admin or editor roles directly.

Last, if you want to get a user’s abilities, call $user->getAbilities(), which returns a database collection:

user-abilities-example.png

Check out the package’s readme to learn how to install and use Bouncer. The cheat sheet is handy for a quick overview of the package’s API and capabilities.


  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
Email ThisBlogThis!Share to XShare to Facebook
Newer Post Older Post Home

0 comments:

Post a Comment

Thanks

Meta

Popular Posts

  • Generate Migrations from an Existing Database With the Migration Generator Package
    Laravel Migration Generator Migration Generator for Laravel is a package by Bennett Treptow to generate migrations from existing database ...
  • Tailwindcss best practices for responsive design
    Tailwind CSS provides powerful utilities for responsive design out of the box. To use it effectively and maintain clean, scalable code, here...
  • Search Through Models with Laravel Searchable
      Laravel Searchable   is a package by   Spatie   to search through models and other sources pragmatically. Using this package, you can get ...
  • Laravel Razorpay Integration | Payment gateway integration Laravel in 30 mins | Laravel Razorpay
    1 Integration of Razorpay with Laravel. In this tutorial, I have taught how to integrate payment gateway with laravel with mini-project. If...
  • Vue.js Render functions
        Vue.js Render functions Vue.js recommends us to use templates to build HTML. Here, we can use the render function as a closer-to-the-co...

Categories

  • Ajax (26)
  • Bootstrap (30)
  • DBMS (42)
  • HTML (12)
  • HTML5 (45)
  • JavaScript (10)
  • Jquery (34)
  • Jquery UI (2)
  • JqueryUI (32)
  • Laravel (1017)
  • Laravel Tutorials (23)
  • Laravel-Question (6)
  • Magento (9)
  • Magento 2 (95)
  • MariaDB (1)
  • MySql Tutorial (2)
  • PHP-Interview-Questions (3)
  • Php Question (13)
  • Python (36)
  • RDBMS (13)
  • SQL Tutorial (79)
  • Vue.js Tutorial (69)
  • Wordpress (150)
  • Wordpress Theme (3)
  • codeigniter (108)
  • oops (4)
  • php (853)

Social Media Links

  • Follow on Twitter
  • Like on Facebook
  • Subscribe on Youtube
  • Follow on Instagram

Pages

  • Home
  • Contact Us
  • Privacy Policy
  • About us

Blog Archive

  • ►  2026 (3)
    • ►  07/26 - 08/02 (2)
    • ►  06/28 - 07/05 (1)
  • ►  2025 (4)
    • ►  07/06 - 07/13 (2)
    • ►  06/29 - 07/06 (2)
  • ►  2024 (486)
    • ►  09/15 - 09/22 (30)
    • ►  09/08 - 09/15 (35)
    • ►  09/01 - 09/08 (35)
    • ►  08/11 - 08/18 (2)
    • ►  08/04 - 08/11 (33)
    • ►  07/28 - 08/04 (30)
    • ►  07/07 - 07/14 (11)
    • ►  06/30 - 07/07 (35)
    • ►  06/23 - 06/30 (5)
    • ►  06/02 - 06/09 (31)
    • ►  05/26 - 06/02 (20)
    • ►  05/05 - 05/12 (29)
    • ►  04/28 - 05/05 (26)
    • ►  04/07 - 04/14 (10)
    • ►  03/31 - 04/07 (34)
    • ►  03/24 - 03/31 (10)
    • ►  03/03 - 03/10 (35)
    • ►  02/25 - 03/03 (15)
    • ►  02/04 - 02/11 (22)
    • ►  01/28 - 02/04 (30)
    • ►  01/07 - 01/14 (8)
  • ►  2023 (484)
    • ►  12/31 - 01/07 (35)
    • ►  12/24 - 12/31 (10)
    • ►  12/03 - 12/10 (33)
    • ►  11/26 - 12/03 (20)
    • ►  11/05 - 11/12 (35)
    • ►  10/29 - 11/05 (20)
    • ►  10/22 - 10/29 (9)
    • ►  10/15 - 10/22 (7)
    • ►  10/08 - 10/15 (9)
    • ►  10/01 - 10/08 (10)
    • ►  09/24 - 10/01 (9)
    • ►  09/17 - 09/24 (9)
    • ►  09/10 - 09/17 (7)
    • ►  09/03 - 09/10 (9)
    • ►  08/27 - 09/03 (9)
    • ►  08/20 - 08/27 (8)
    • ►  08/13 - 08/20 (8)
    • ►  08/06 - 08/13 (8)
    • ►  07/30 - 08/06 (8)
    • ►  07/23 - 07/30 (7)
    • ►  07/16 - 07/23 (8)
    • ►  07/09 - 07/16 (7)
    • ►  07/02 - 07/09 (8)
    • ►  06/25 - 07/02 (7)
    • ►  06/18 - 06/25 (7)
    • ►  06/11 - 06/18 (7)
    • ►  06/04 - 06/11 (11)
    • ►  05/28 - 06/04 (7)
    • ►  05/21 - 05/28 (8)
    • ►  05/14 - 05/21 (11)
    • ►  05/07 - 05/14 (7)
    • ►  04/30 - 05/07 (7)
    • ►  04/23 - 04/30 (8)
    • ►  04/16 - 04/23 (9)
    • ►  04/09 - 04/16 (7)
    • ►  04/02 - 04/09 (4)
    • ►  03/26 - 04/02 (21)
    • ►  03/19 - 03/26 (2)
    • ►  03/12 - 03/19 (9)
    • ►  03/05 - 03/12 (26)
    • ►  02/26 - 03/05 (25)
    • ►  01/15 - 01/22 (7)
    • ►  01/08 - 01/15 (1)
  • ►  2022 (1037)
    • ►  12/11 - 12/18 (13)
    • ►  12/04 - 12/11 (1)
    • ►  11/27 - 12/04 (40)
    • ►  11/06 - 11/13 (1)
    • ►  10/16 - 10/23 (13)
    • ►  09/04 - 09/11 (5)
    • ►  08/21 - 08/28 (24)
    • ►  08/14 - 08/21 (24)
    • ►  07/03 - 07/10 (9)
    • ►  06/19 - 06/26 (3)
    • ►  05/29 - 06/05 (3)
    • ►  05/22 - 05/29 (3)
    • ►  05/15 - 05/22 (109)
    • ►  05/01 - 05/08 (7)
    • ►  04/24 - 05/01 (7)
    • ►  04/17 - 04/24 (64)
    • ►  04/10 - 04/17 (115)
    • ►  04/03 - 04/10 (73)
    • ►  03/27 - 04/03 (77)
    • ►  03/13 - 03/20 (2)
    • ►  03/06 - 03/13 (25)
    • ►  02/27 - 03/06 (18)
    • ►  02/20 - 02/27 (153)
    • ►  02/13 - 02/20 (187)
    • ►  01/30 - 02/06 (45)
    • ►  01/23 - 01/30 (15)
    • ►  01/16 - 01/23 (1)
  • ▼  2021 (412)
    • ►  10/24 - 10/31 (2)
    • ►  07/25 - 08/01 (1)
    • ►  07/11 - 07/18 (10)
    • ►  06/13 - 06/20 (29)
    • ►  05/23 - 05/30 (1)
    • ►  05/02 - 05/09 (24)
    • ►  04/25 - 05/02 (24)
    • ▼  04/18 - 04/25 (112)
      • Query Tracer Package
      • Blogify – Add a blog to an existing Laravel App
      • Laravel API Generator
      • Laravel Angular Admin Starter Kit
      • Laravel Analytics v2
      • Laravel and Elasticsearch
      • Easily Integrate HTTP 2 Server Push with a Laravel...
      • Easily Test Email with MailThief
      • New Community Project: Laravel Notification Channels
      • Laravel Scout is now open for developer testing
      • TNTSearch Driver is now available for Laravel Scout
      • Laravel Passport – Easily setup your own OAuth2 se...
      • Easily deleting old soft-deleted records with Quic...
      • Laravel Lambo – A package to quickly scaffold out ...
      • Improved model generation with Laracademy Generators
      • Edit your environment files through the browser wi...
      • Laravel Uptime Monitor
      • View your routes through the browser with the Pret...
      • Laravel Blade SVG Directive
      • Laravel Missing Page Redirector Package
      • Laravel Charting Package
      • Build your own Slack Bot with this PHP library
      • Store your translations in the database with Larav...
      • Build Custom Admin Panels With Backpack for Laravel
      • Easily Create Stripe Tokens and Cards For Testing
      • Laravel Countries and Currencies Package
      • Laravel Decomposer – List your dependencies and en...
      • Laravel Package To Login As Other Users During Dev...
      • Laravel OPcache Package
      • LaraCSV – Generate CSV files from your Eloquent mo...
      • Interactive Make Command
      • Laravel Language Manager
      • Interactive Make Command
      • Laravel Sketchpad
      • Invisible reCAPTCHA Integration with Laravel
      • Partyline is a new package that allows you to outp...
      • Bring Laravel Collections to JavaScript with Colle...
      • Homeboy Allows You to Automate Adding Sites to Hom...
      • Bouncer a Laravel Package for Role and Ability Aut...
      • Two Best Laravel Packages to Manage Roles Permissions
      • Track Laravel Model Changes with Laravel Auditing
      • BotMan 2.0 PHP Chatbot Framework
      • Laravel Shareable Models Package
      • Appstract Laravel Blade Directives
      • Laravel Stats Code Statistics for your Laravel Pro...
      • Protect your webhooks with Laravel Shield
      • Collision Is An Error Handler Framework for Consol...
      • Bootstrap Laravel 5 Packages with Bootpack
      • Reload Your Laravel Tinker Session with Tinx
      • Continuous Testing Dashboard for Laravel
      • Vessel is a Lightweight Docker Environment for Lar...
      • A Package for Laravel Blade Extension Classes
      • Bootstrap 4 Laravel Preset for Laravel 5.5
      • A Zero-config Purgecss Wrapper for Laravel Mix
      • Beautiful PHP CLI Menus for Laravel Artisan Commands
      • Under Construction Package
      • Laravel Model Caching Package: Model-caching made ...
      • Add a Check For Pwned Passwords In Your Laravel Fo...
      • Guzzle Advanced Throttling Middleware and Laravel ...
      • Laravel Excel 3.0
      • PHPUnit Pretty Result Printer Package
      • Laravel Log Enhancer Package
      • Laravel Page Cache for Lightning Fast Page Loads
      • HTTP Cache Packages for Laravel
      • Cascading Soft Deletes with Laravel 5
      • Count Models With the Laravel Visits Package
      • Laravel View X-Ray
      • Laravel Love Likes and Dislikes for Eloquent Models
      • Laravel Befriended
      • Speed Up Laravel on Top of Swoole
      • Laravel Schemaless Attributes Package
      • Laravel Credentials Package for Encrypted Applicat...
      • Eloquent Sluggable Package
      • Use Laravel GeoIP to Determine Users’ Geographical...
      • A Stand-Alone Laravel Slack Package
      • Plug and Play Avatars in Laravel with Laravolt
      • Laravel JSON – A Simple Wrapper Around JSON for Ca...
      • Laravel Localization Package for Vue
      • Laravel Breadcrumbs Package
      • Automatically Open Files on Artisan “Make” Commands
      • Eventy WordPress-like Actions and Filters for Laravel
      • Laravel Tenancy – Multi-Tenant Package for Laravel
      • Laravel Self-Diagnosis Package
      • Laravel Relationship Events
      • Laravel Enum Package
      • LaRecipe: Documentation with Markdown in Your Lara...
      • Laratables Ajax support of DataTables in Laravel
      • Luhn Algorithm Package for Laravel
      • Laravel View Models
      • Laravel Mail Viewer
      • Laravel Proximage A Handy Package for Proxying Images
      • Laravel Database Hashing Package
      • Laravel Tag Helper
      • PHP Semantic Versioning Helper
      • Laravel WebSockets Package Released
      • Accountant Laravel Package
      • Five Hidden Features of the Laravel Excel Package
      • Laravel Mailbox
      • Subdomain Multitenency Package for Laravel
      • Laravel Options Package
      • Laravel Favicon Package
      • Laravel Tinker Server Package
      • Snipe Migrations Laravel Package
      • PHPUnit SpeedTrap
      • Customizing Stubs in Laravel
      • Bagisto E-commerce Platform
      • GitDown Parsing Markdown in PHP
      • Laravel Personal Data Export
      • Laravel HATEOAS Package
      • Register Multilingual Routes in Laravel
      • Laravel Queue Driver for RabbitMQ
      • Laravel Cashier Mollie V1 Is Now Available
    • ►  04/11 - 04/18 (1)
    • ►  04/04 - 04/11 (6)
    • ►  03/28 - 04/04 (86)
    • ►  03/21 - 03/28 (19)
    • ►  03/14 - 03/21 (2)
    • ►  03/07 - 03/14 (10)
    • ►  02/28 - 03/07 (1)
    • ►  02/21 - 02/28 (29)
    • ►  02/14 - 02/21 (13)
    • ►  02/07 - 02/14 (12)
    • ►  01/31 - 02/07 (6)
    • ►  01/17 - 01/24 (2)
    • ►  01/10 - 01/17 (8)
    • ►  01/03 - 01/10 (14)
  • ►  2020 (376)
    • ►  12/27 - 01/03 (37)
    • ►  12/20 - 12/27 (92)
    • ►  12/13 - 12/20 (29)
    • ►  12/06 - 12/13 (37)
    • ►  11/29 - 12/06 (4)
    • ►  11/15 - 11/22 (14)
    • ►  11/08 - 11/15 (8)
    • ►  11/01 - 11/08 (2)
    • ►  10/18 - 10/25 (14)
    • ►  10/11 - 10/18 (16)
    • ►  10/04 - 10/11 (10)
    • ►  09/20 - 09/27 (10)
    • ►  09/06 - 09/13 (19)
    • ►  08/30 - 09/06 (26)
    • ►  08/23 - 08/30 (4)
    • ►  08/16 - 08/23 (2)
    • ►  07/12 - 07/19 (48)
    • ►  05/17 - 05/24 (2)
    • ►  01/05 - 01/12 (2)
  • ►  2019 (74)
    • ►  07/07 - 07/14 (6)
    • ►  06/16 - 06/23 (6)
    • ►  02/10 - 02/17 (17)
    • ►  01/13 - 01/20 (37)
    • ►  01/06 - 01/13 (8)
  • ►  2018 (376)
    • ►  12/30 - 01/06 (24)
    • ►  12/16 - 12/23 (8)
    • ►  12/09 - 12/16 (98)
    • ►  12/02 - 12/09 (16)
    • ►  11/18 - 11/25 (36)
    • ►  11/04 - 11/11 (18)
    • ►  10/28 - 11/04 (10)
    • ►  10/21 - 10/28 (26)
    • ►  10/14 - 10/21 (52)
    • ►  10/07 - 10/14 (4)
    • ►  09/30 - 10/07 (2)
    • ►  09/23 - 09/30 (68)
    • ►  09/16 - 09/23 (4)
    • ►  09/09 - 09/16 (4)
    • ►  08/26 - 09/02 (6)

Data Publish News

Loading...

Al Jazeera – Breaking News, World News and Video from Al Jazeera

Loading...

Laravel News

Loading...

Copyright © CoderFunda | Powered by Blogger
Design by Coderfunda | Blogger Theme by Coderfunda | Distributed By Coderfunda