cubekit/laracan
Easy define abilities of the current user.
125
1
| Install | |
|---|---|
composer require cubekit/laracan |
|
| Latest Version: | v0.2.1 |
| PHP: | >=5.4.0 |
| License: | MIT |
| Last Updated: | Apr 10, 2015 |
| Links: | GitHub · Packagist |
Maintainer: anatoliyarkhipov
laracan
Installation
- Require the package with composer:
composer require cubekit/laracan
- Add provider to your
config/app.php:
'providers' => [
// ...
'Cubekit\Laracan\LaracanServiceProvider',
// ...
],
- Publish config:
php artisan vendor:publish --provider="Cubekit\Laracan\LaracanServiceProvider"
- Add the
Abilityclass to theappfolder and implement theCubekit\Laracan\AbilityContract
Note: the default config assumes that the
Abilityclass is placed in theappfolder. You are free to change it and place the class where would you want.
Usage
- Define abilities
class Ability implements AbilityContract {
public function initialize($user, Closure $can)
{
$user = $user ?: new App\User;
// NOTE: Laracan does not provide any roles behavior! Assume that some
// package already installed for this, like Entrust
if ($user->hasRole('admin')) {
// Admin can edit posts and comments unconditionally
$can('edit', 'Post');
$can('edit', 'Comment');
return;
}
// User can edit a post only if he is its author
$can('edit', 'Post', ['author_id' => $user->getKey()]);
$can('edit', 'Comment', function($comment) use ($user)
{
// User can edit a comment only if he is its author
// and comment is not older than 15 minutes
return (
$comment->author_id == $user->getKey() &&
$comment->created_at >= Carbon::now()->subMinutes(15)
);
});
}
}
- Check ability in a request
class EditPostRequest {
public function rules()
{
// ...
}
public function authorize()
{
$post = Post::find( $this->route('post') );
return can('edit', $post);
}
}
- Check ability in a view
@foreach($post->comments as $comment)
<div class="comment">
<div class="comment-body">{{ $comment->body }}</div>
@can('edit', $comment)
<div class="comment-footer">
<a href="{{ route('comment.edit', $comment) }}">Edit</a>
</div>
@endcan
</div>
</div>
@endforeach
- Or you can use the
canfunction directly to force IDE understand this code
@foreach($post->comments as $comment)
<div class="comment">
<div class="comment-body">{{ $comment->body }}</div>
@if( can('edit', $comment) )
<div class="comment-footer">
<a href="{{ route('comment.edit', $comment) }}">Edit</a>
</div>
@endif
</div>
</div>
@endforeach
License
MIT
Related Packages
jeremykenedy/laravel-roles
A Powerful package for handling roles and permissions in Laravel. Supports Larav...
886,599
1,048
kodeine/laravel-acl
Light-weight role-based permissions for Laravel 5 built in Auth system.
363,504
774