Skip to content

Commit

Permalink
add: laravel-permission
Browse files Browse the repository at this point in the history
  • Loading branch information
falstack committed May 16, 2019
1 parent 5c3c1db commit e014221
Show file tree
Hide file tree
Showing 9 changed files with 337 additions and 8 deletions.
5 changes: 4 additions & 1 deletion app/Models/Pin.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,15 @@
use App\Services\Relation\Traits\CanBeBookmarked;
use App\Services\Relation\Traits\CanBeFavorited;
use App\Services\Relation\Traits\CanBeVoted;
use Spatie\Permission\Traits\HasRoles;

class Pin extends Model
{
use SoftDeletes,
use SoftDeletes, HasRoles,
CanBeVoted, CanBeBookmarked, CanBeFavorited;

protected $guard_name = 'api';

protected $fillable = [
'slug',
'title',
Expand Down
5 changes: 4 additions & 1 deletion app/Models/Tag.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@
use App\Services\Relation\Traits\CanBeFollowed;
use App\Services\Relation\Traits\CanLike;
use App\Services\Relation\Traits\CanFavorite;
use Spatie\Permission\Traits\HasRoles;

class Tag extends Model
{
use CanBeFollowed, CanLike, CanFavorite;
use CanBeFollowed, CanLike, CanFavorite, HasRoles;

protected $guard_name = 'api';

protected $fillable = [
'slug',
Expand Down
3 changes: 2 additions & 1 deletion app/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,11 @@
use App\Services\Relation\Traits\CanFavorite;
use App\Services\Relation\Traits\CanVote;
use App\Services\Relation\Traits\CanSubscribe;
use Spatie\Permission\Traits\HasRoles;

class User extends Model implements AuthenticatableContract, AuthorizableContract
{
use Authenticatable, Authorizable, SoftDeletes,
use Authenticatable, Authorizable, SoftDeletes, HasRoles,
CanFollow, CanLike, CanBookmark, CanFavorite, CanVote, CanSubscribe;

/**
Expand Down
13 changes: 9 additions & 4 deletions bootstrap/app.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@

$app->configure('cors');

$app->configure('permission');

/*
|--------------------------------------------------------------------------
| Register Container Bindings
Expand Down Expand Up @@ -61,19 +63,21 @@
|
*/

// $app->middleware([
// App\Http\Middleware\ExampleMiddleware::class
// ]);
$app->middleware([
\Barryvdh\Cors\HandleCors::class,
]);

$app->routeMiddleware([
'auth' => App\Http\Middleware\Authenticate::class,
'admin' => App\Http\Middleware\AdminMiddleware::class,
'throttle' => App\Http\Middleware\ThrottleMiddleware::class
'throttle' => App\Http\Middleware\ThrottleMiddleware::class,
'permission' => Spatie\Permission\Middlewares\PermissionMiddleware::class,
'role' => Spatie\Permission\Middlewares\RoleMiddleware::class,
]);


$app->alias('cache', \Illuminate\Cache\CacheManager::class);

/*
|--------------------------------------------------------------------------
| Register Service Providers
Expand All @@ -94,6 +98,7 @@
$app->register(Overtrue\LaravelFollow\FollowServiceProvider::class);
$app->register(App\Providers\QueryLogServiceProvider::class);
$app->register(Barryvdh\Cors\ServiceProvider::class);
$app->register(Spatie\Permission\PermissionServiceProvider::class);

/*
|--------------------------------------------------------------------------
Expand Down
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"laravel/lumen-framework": "5.8.*",
"mews/purifier": "^2.1",
"overtrue/laravel-follow": "^1.1",
"spatie/laravel-permission": "^2.37",
"vlucas/phpdotenv": "^3.3"
},
"require-dev": {
Expand Down
85 changes: 85 additions & 0 deletions config/auth.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
<?php

return [

/*
|--------------------------------------------------------------------------
| Authentication Defaults
|--------------------------------------------------------------------------
|
| This option controls the default authentication "guard" and password
| reset options for your application. You may change these defaults
| as required, but they're a perfect start for most applications.
|
*/

'defaults' => [
'guard' => env('AUTH_GUARD', 'api'),
],

/*
|--------------------------------------------------------------------------
| Authentication Guards
|--------------------------------------------------------------------------
|
| Next, you may define every authentication guard for your application.
| Of course, a great default configuration has been defined for you
| here which uses session storage and the Eloquent user provider.
|
| All authentication drivers have a user provider. This defines how the
| users are actually retrieved out of your database or other storage
| mechanisms used by this application to persist your user's data.
|
| Supported: "token"
|
*/

'guards' => [
'api' => ['driver' => 'api'],
],

/*
|--------------------------------------------------------------------------
| User Providers
|--------------------------------------------------------------------------
|
| All authentication drivers have a user provider. This defines how the
| users are actually retrieved out of your database or other storage
| mechanisms used by this application to persist your user's data.
|
| If you have multiple user tables or models you may configure multiple
| sources which represent each model / table. These sources may then
| be assigned to any extra authentication guards you have defined.
|
| Supported: "database", "eloquent"
|
*/

'providers' => [
//
],

/*
|--------------------------------------------------------------------------
| Resetting Passwords
|--------------------------------------------------------------------------
|
| Here you may set the options for resetting passwords including the view
| that is your password reset e-mail. You may also set the name of the
| table that maintains all of the reset tokens for your application.
|
| You may specify multiple password reset configurations if you have more
| than one user table or model in the application and you want to have
| separate password reset settings based on the specific user types.
|
| The expire time is the number of minutes that the reset token should be
| considered valid. This security feature keeps tokens short-lived so
| they have less time to be guessed. You may change this as needed.
|
*/

'passwords' => [
//
],

];
2 changes: 1 addition & 1 deletion config/laravels.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
'register_providers' => [],
'cleaners' => [
//Hhxsv5\LaravelS\Illuminate\Cleaners\SessionCleaner::class, // If you use the session/authentication in your project, please uncomment this line
//Hhxsv5\LaravelS\Illuminate\Cleaners\AuthCleaner::class, // If you use the authentication/passport in your project, please uncomment this line
Hhxsv5\LaravelS\Illuminate\Cleaners\AuthCleaner::class, // If you use the authentication/passport in your project, please uncomment this line
//Hhxsv5\LaravelS\Illuminate\Cleaners\JWTCleaner::class, // If you use the package "tymon/jwt-auth" in your project, please uncomment this line
// ...
],
Expand Down
129 changes: 129 additions & 0 deletions config/permission.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
<?php

return [

'models' => [

/*
* When using the "HasPermissions" trait from this package, we need to know which
* Eloquent model should be used to retrieve your permissions. Of course, it
* is often just the "Permission" model but you may use whatever you like.
*
* The model you want to use as a Permission model needs to implement the
* `Spatie\Permission\Contracts\Permission` contract.
*/

'permission' => Spatie\Permission\Models\Permission::class,

/*
* When using the "HasRoles" trait from this package, we need to know which
* Eloquent model should be used to retrieve your roles. Of course, it
* is often just the "Role" model but you may use whatever you like.
*
* The model you want to use as a Role model needs to implement the
* `Spatie\Permission\Contracts\Role` contract.
*/

'role' => Spatie\Permission\Models\Role::class,

],

'table_names' => [

/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your roles. We have chosen a basic
* default value but you may easily change it to any table you like.
*/

'roles' => 'roles',

/*
* When using the "HasPermissions" trait from this package, we need to know which
* table should be used to retrieve your permissions. We have chosen a basic
* default value but you may easily change it to any table you like.
*/

'permissions' => 'permissions',

/*
* When using the "HasPermissions" trait from this package, we need to know which
* table should be used to retrieve your models permissions. We have chosen a
* basic default value but you may easily change it to any table you like.
*/

'model_has_permissions' => 'model_has_permissions',

/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your models roles. We have chosen a
* basic default value but you may easily change it to any table you like.
*/

'model_has_roles' => 'model_has_roles',

/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your roles permissions. We have chosen a
* basic default value but you may easily change it to any table you like.
*/

'role_has_permissions' => 'role_has_permissions',
],

'column_names' => [

/*
* Change this if you want to name the related model primary key other than
* `model_id`.
*
* For example, this would be nice if your primary keys are all UUIDs. In
* that case, name this `model_uuid`.
*/

'model_morph_key' => 'model_id',
],

/*
* When set to true, the required permission/role names are added to the exception
* message. This could be considered an information leak in some contexts, so
* the default setting is false here for optimum safety.
*/

'display_permission_in_exception' => false,

'cache' => [

/*
* By default all permissions are cached for 24 hours to speed up performance.
* When permissions or roles are updated the cache is flushed automatically.
*/

'expiration_time' => \DateInterval::createFromDateString('24 hours'),

/*
* The cache key used to store all permissions.
*/

'key' => 'spatie.permission.cache',

/*
* When checking for a permission against a model by passing a Permission
* instance to the check, this key determines what attribute on the
* Permissions model is used to cache against.
*
* Ideally, this should match your preferred way of checking permissions, eg:
* `$user->can('view-posts')` would be 'name'.
*/

'model_key' => 'name',

/*
* You may optionally indicate a specific cache driver to use for permission and
* role caching using any of the `store` drivers listed in the cache.php config
* file. Using 'default' here means to use the `default` set in cache.php.
*/

'store' => 'default',
],
];
Loading

0 comments on commit e014221

Please sign in to comment.