在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称(OpenSource Name):romanbican/roles开源软件地址(OpenSource Url):https://github.com/romanbican/roles开源编程语言(OpenSource Language):PHP 100.0%开源软件介绍(OpenSource Introduction):Roles And Permissions For Laravel 5Powerful package for handling roles and permissions in Laravel 5 (5.1 and also 5.0). InstallationThis package is very easy to set up. There are only couple of steps. ComposerPull this package in through Composer (file {
"require": {
"php": ">=5.5.9",
"laravel/framework": "5.1.*",
"bican/roles": "2.1.*"
}
}
Run this command inside your terminal.
Service ProviderAdd the package to your application service providers in 'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Foundation\Providers\ArtisanServiceProvider::class,
Illuminate\Auth\AuthServiceProvider::class,
...
/**
* Third Party Service Providers...
*/
Bican\Roles\RolesServiceProvider::class,
], Config File And MigrationsPublish the package config file and migrations to your application. Run these commands inside your terminal.
And also run migrations.
HasRoleAndPermission Trait And ContractInclude use Bican\Roles\Traits\HasRoleAndPermission;
use Bican\Roles\Contracts\HasRoleAndPermission as HasRoleAndPermissionContract;
class User extends Model implements AuthenticatableContract, CanResetPasswordContract, HasRoleAndPermissionContract
{
use Authenticatable, CanResetPassword, HasRoleAndPermission; And that's it! UsageCreating Rolesuse Bican\Roles\Models\Role;
$adminRole = Role::create([
'name' => 'Admin',
'slug' => 'admin',
'description' => '', // optional
'level' => 1, // optional, set to 1 by default
]);
$moderatorRole = Role::create([
'name' => 'Forum Moderator',
'slug' => 'forum.moderator',
]);
Attaching And Detaching RolesIt's really simple. You fetch a user from database and call use App\User;
$user = User::find($id);
$user->attachRole($adminRole); // you can pass whole object, or just an id $user->detachRole($adminRole); // in case you want to detach role
$user->detachAllRoles(); // in case you want to detach all roles Checking For RolesYou can now check if the user has required role. if ($user->is('admin')) { // you can pass an id or slug
// or alternatively $user->hasRole('admin')
} You can also do this: if ($user->isAdmin()) {
//
} And of course, there is a way to check for multiple roles: if ($user->is('admin|moderator')) {
/*
| Or alternatively:
| $user->is('admin, moderator'), $user->is(['admin', 'moderator']),
| $user->isOne('admin|moderator'), $user->isOne('admin, moderator'), $user->isOne(['admin', 'moderator'])
*/
// if user has at least one role
}
if ($user->is('admin|moderator', true)) {
/*
| Or alternatively:
| $user->is('admin, moderator', true), $user->is(['admin', 'moderator'], true),
| $user->isAll('admin|moderator'), $user->isAll('admin, moderator'), $user->isAll(['admin', 'moderator'])
*/
// if user has all roles
} LevelsWhen you are creating roles, there is optional parameter if ($user->level() > 4) {
//
}
Creating PermissionsIt's very simple thanks to use Bican\Roles\Models\Permission;
$createUsersPermission = Permission::create([
'name' => 'Create users',
'slug' => 'create.users',
'description' => '', // optional
]);
$deleteUsersPermission = Permission::create([
'name' => 'Delete users',
'slug' => 'delete.users',
]); Attaching And Detaching PermissionsYou can attach permissions to a role or directly to a specific user (and of course detach them as well). use App\User;
use Bican\Roles\Models\Role;
$role = Role::find($roleId);
$role->attachPermission($createUsersPermission); // permission attached to a role
$user = User::find($userId);
$user->attachPermission($deleteUsersPermission); // permission attached to a user $role->detachPermission($createUsersPermission); // in case you want to detach permission
$role->detachAllPermissions(); // in case you want to detach all permissions
$user->detachPermission($deleteUsersPermission);
$user->detachAllPermissions(); Checking For Permissionsif ($user->can('create.users') { // you can pass an id or slug
//
}
if ($user->canDeleteUsers()) {
//
} You can check for multiple permissions the same way as roles. You can make use of additional methods like Permissions InheritingRole with higher level is inheriting permission from roles with lower level. There is an example of this You have three roles:
Entity CheckLet's say you have an article and you want to edit it. This article belongs to a user (there is a column use App\Article;
use Bican\Roles\Models\Permission;
$editArticlesPermission = Permission::create([
'name' => 'Edit articles',
'slug' => 'edit.articles',
'model' => 'App\Article',
]);
$user->attachPermission($editArticlesPermission);
$article = Article::find(1);
if ($user->allowed('edit.articles', $article)) { // $user->allowedEditArticles($article)
//
} This condition checks if the current user is the owner of article. If not, it will be looking inside user permissions for a row we created before. if ($user->allowed('edit.articles', $article, false)) { // now owner check is disabled
//
} Blade ExtensionsThere are four Blade extensions. Basically, it is replacement for classic if statements. @role('admin') // @if(Auth::check() && Auth::user()->is('admin'))
// user is admin
@endrole
@permission('edit.articles') // @if(Auth::check() && Auth::user()->can('edit.articles'))
// user can edit articles
@endpermission
@level(2) // @if(Auth::check() && Auth::user()->level() >= 2)
// user has level 2 or higher
@endlevel
@allowed('edit', $article) // @if(Auth::check() && Auth::user()->allowed('edit', $article))
// show edit button
@endallowed
@role('admin|moderator', 'all') // @if(Auth::check() && Auth::user()->is('admin|moderator', 'all'))
// user is admin and also moderator
@else
// something else
@endrole MiddlewareThis package comes with /**
* The application's route middleware.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'role' => \Bican\Roles\Middleware\VerifyRole::class,
'permission' => \Bican\Roles\Middleware\VerifyPermission::class,
'level' => \Bican\Roles\Middleware\VerifyLevel::class,
]; Now you can easily protect your routes. $router->get('/example', [
'as' => 'example',
'middleware' => 'role:admin',
'uses' => 'ExampleController@index',
]);
$router->post('/example', [
'as' => 'example',
'middleware' => 'permission:edit.articles',
'uses' => 'ExampleController@index',
]);
$router->get('/example', [
'as' => 'example',
'middleware' => 'level:2', // level >= 2
'uses' => 'ExampleController@index',
]); It throws You can catch these exceptions inside /**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $e
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $e)
{
if ($e instanceof \Bican\Roles\Exceptions\RoleDeniedException) {
// you can for example flash message, redirect...
return redirect()->back();
}
return parent::render($request, $e);
} Config FileYou can change connection for models, slug separator, models path and there is also a handy pretend feature. Have a look at config file for more information. More InformationFor more information, please have a look at HasRoleAndPermission contract. LicenseThis package is free software distributed under the terms of the MIT license. |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论