diff options
author | Igor Scheller <igor.scheller@igorshp.de> | 2019-07-28 17:14:42 +0200 |
---|---|---|
committer | Igor Scheller <igor.scheller@igorshp.de> | 2019-07-29 00:58:06 +0200 |
commit | 219c54411bb765bebd7813ad3e49ab05acf0b150 (patch) | |
tree | 9cf1cea8fccac16030e308df63352c2237311c0e /src | |
parent | c1f6374f377d7b6d2aeefa464837226279a521a3 (diff) |
Permissions: Added models and migrations
Diffstat (limited to 'src')
-rw-r--r-- | src/Helpers/Authenticator.php | 2 | ||||
-rw-r--r-- | src/Models/Auth/Permission.php | 57 | ||||
-rw-r--r-- | src/Models/Auth/Role.php | 71 | ||||
-rw-r--r-- | src/Models/BaseModel.php | 3 | ||||
-rw-r--r-- | src/Models/Team.php | 99 | ||||
-rw-r--r-- | src/Models/User/User.php | 55 |
6 files changed, 285 insertions, 2 deletions
diff --git a/src/Helpers/Authenticator.php b/src/Helpers/Authenticator.php index a7fbe8c7..f1e054ef 100644 --- a/src/Helpers/Authenticator.php +++ b/src/Helpers/Authenticator.php @@ -29,7 +29,7 @@ class Authenticator protected $passwordAlgorithm = PASSWORD_DEFAULT; /** @var int */ - protected $guestRole = 10; + protected $guestRole = 1; /** * @param ServerRequestInterface $request diff --git a/src/Models/Auth/Permission.php b/src/Models/Auth/Permission.php new file mode 100644 index 00000000..1a4fd3e4 --- /dev/null +++ b/src/Models/Auth/Permission.php @@ -0,0 +1,57 @@ +<?php + +namespace Engelsystem\Models\Auth; + +use Engelsystem\Models\BaseModel; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; +use Staudenmeir\EloquentHasManyDeep\HasManyDeep; + +/** + * @property integer $id + * @property string $name + * @property string|null $description + * @property \Carbon\Carbon $created_at + * @property \Carbon\Carbon $updated_at + * + * @property-read \Illuminate\Database\Query\Builder|\Engelsystem\Models\Auth\Role[] $roles + * @property-read \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] $users + * + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User whereId($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereName($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereDescription($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereCreatedAt($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereUpdatedAt($value) + */ +class Permission extends BaseModel +{ + /** @var bool enable timestamps */ + public $timestamps = true; + + /** The attributes that are mass assignable */ + protected $fillable = [ + 'name', + 'description', + ]; + + /** + * The roles that have this permission + * + * @return BelongsToMany + */ + public function roles() + { + return $this + ->belongsToMany(Role::class) + ->withTimestamps(); + } + + /** + * The users that that have the permission + * + * @return HasManyDeep + */ + public function users() + { + return $this->hasManyDeepFromRelations($this->roles(), (new Role)->users()); + } +} diff --git a/src/Models/Auth/Role.php b/src/Models/Auth/Role.php new file mode 100644 index 00000000..ede93ae1 --- /dev/null +++ b/src/Models/Auth/Role.php @@ -0,0 +1,71 @@ +<?php + +namespace Engelsystem\Models\Auth; + +use Engelsystem\Models\BaseModel; +use Engelsystem\Models\Team; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; +use Staudenmeir\EloquentHasManyDeep\HasManyDeep; + +/** + * @property integer $id + * @property string $name + * @property string|null $description + * @property \Carbon\Carbon $created_at + * @property \Carbon\Carbon $updated_at + * + * @property-read \Illuminate\Database\Query\Builder|\Engelsystem\Models\Auth\Permission[] $permissions + * @property-read \Illuminate\Database\Query\Builder|\Engelsystem\Models\Team[] $teams + * @property-read \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] $users + * + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User whereId($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereName($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereDescription($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereCreatedAt($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereUpdatedAt($value) + */ +class Role extends BaseModel +{ + /** @var bool enable timestamps */ + public $timestamps = true; + + /** The attributes that are mass assignable */ + protected $fillable = [ + 'name', + 'description', + ]; + + /** + * The roles permissions + * + * @return BelongsToMany + */ + public function permissions() + { + return $this + ->belongsToMany(Permission::class) + ->withTimestamps(); + } + + /** + * The teams that that have the role assigned + * + * @return BelongsToMany + */ + public function teams() + { + return $this + ->belongsToMany(Team::class) + ->withTimestamps(); + } + + /** + * The users that that have the role assigned + * + * @return HasManyDeep + */ + public function users() + { + return $this->hasManyDeepFromRelations($this->teams(), (new Team)->users()); + } +} diff --git a/src/Models/BaseModel.php b/src/Models/BaseModel.php index 49255905..2eae2efc 100644 --- a/src/Models/BaseModel.php +++ b/src/Models/BaseModel.php @@ -5,9 +5,12 @@ namespace Engelsystem\Models; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; +use Staudenmeir\EloquentHasManyDeep\HasRelationships as HasManyDeep; abstract class BaseModel extends Model { + use HasManyDeep; + /** @var bool Disable timestamps by default because of "Datensparsamkeit" */ public $timestamps = false; diff --git a/src/Models/Team.php b/src/Models/Team.php new file mode 100644 index 00000000..b6acaadc --- /dev/null +++ b/src/Models/Team.php @@ -0,0 +1,99 @@ +<?php + +namespace Engelsystem\Models; + +use Engelsystem\Models\Auth\Role; +use Engelsystem\Models\User\User; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; + +/** + * @property integer $id + * @property string $name + * @property string|null $description + * @property string|null $contact_name + * @property string|null $contact_dect + * @property string|null $contact_email + * @property bool $restricted Join Needs additional + * confirmation + * @property bool $self_signup Can signup for shifts + * @property bool $requires_drivers_license + * @property bool $show_on_frontend + * @property bool $show_on_dashboard + * @property \Carbon\Carbon $created_at + * @property \Carbon\Carbon $updated_at + * + * @property-read \Illuminate\Database\Query\Builder|\Engelsystem\Models\Auth\Role[] $roles + * @property-read \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] $supporters + * @property-read \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] $users + * + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User whereId($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereName($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereDescription($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereContactName($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereContactDect($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereContactEmail($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereRestricted($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereSelfSignup($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] + * whereRequiresDriversLicense($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereShowOnFrontend($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereShowOnDashboard($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereCreatedAt($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereUpdatedAt($value) + */ +class Team extends BaseModel +{ + /** @var bool enable timestamps */ + public $timestamps = true; + + /** The attributes that are mass assignable */ + protected $fillable = [ + 'name', + 'description', + 'contact_name', + 'contact_dect', + 'contact_email', + 'restricted', + 'self_signup', + 'requires_drivers_license', + 'show_on_frontend', + 'show_on_dashboard', + ]; + + /** + * The roles that belong to the team + * + * @return BelongsToMany + */ + public function roles() + { + return $this + ->belongsToMany(Role::class) + ->withTimestamps(); + } + + /** + * The users that that support to the team + * + * @return BelongsToMany + */ + public function supporters() + { + return $this + ->belongsToMany(User::class, 'supporter_team') + ->withTimestamps(); + } + + /** + * The users that that belong to the team + * + * @return BelongsToMany + */ + public function users() + { + return $this + ->belongsToMany(User::class) + ->withPivot(['confirmed']) + ->withTimestamps(); + } +} diff --git a/src/Models/User/User.php b/src/Models/User/User.php index 4be3246c..b92ed5fe 100644 --- a/src/Models/User/User.php +++ b/src/Models/User/User.php @@ -2,8 +2,12 @@ namespace Engelsystem\Models\User; +use Engelsystem\Models\Auth\Role; use Engelsystem\Models\BaseModel; +use Engelsystem\Models\Team; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasOne; +use Staudenmeir\EloquentHasManyDeep\HasManyDeep; /** * @property integer $id @@ -19,8 +23,12 @@ use Illuminate\Database\Eloquent\Relations\HasOne; * @property-read \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\PersonalData $personalData * @property-read \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\Settings $settings * @property-read \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\State $state + * @property-read \Illuminate\Database\Query\Builder|\Engelsystem\Models\Auth\Permission[] $permissions + * @property-read \Illuminate\Database\Query\Builder|\Engelsystem\Models\Auth\Role[] $roles + * @property-read \Illuminate\Database\Query\Builder|\Engelsystem\Models\Team[] $supports + * @property-read \Illuminate\Database\Query\Builder|\Engelsystem\Models\Team[] $teams * - * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User whereId($value) + * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User whereId($value) * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereName($value) * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] whereEmail($value) * @method static \Illuminate\Database\Query\Builder|\Engelsystem\Models\User\User[] wherePassword($value) @@ -75,6 +83,51 @@ class User extends BaseModel } /** + * The permissions that the user has + * + * @return HasManyDeep + */ + public function permissions() + { + return $this->hasManyDeepFromRelations($this->roles(), (new Role)->permissions()); + } + + /** + * The roles that belong to the user + * + * @return HasManyDeep + */ + public function roles() + { + return $this->hasManyDeepFromRelations($this->teams(), (new Team)->roles()); + } + + /** + * The teams that are supported by the user + * + * @return BelongsToMany + */ + public function supports() + { + return $this + ->belongsToMany(Team::class, 'supporter_team') + ->withTimestamps(); + } + + /** + * The teams that belong to the user + * + * @return BelongsToMany + */ + public function teams() + { + return $this + ->belongsToMany(Team::class) + ->withPivot(['confirmed']) + ->withTimestamps(); + } + + /** * @return HasOne */ public function settings() |