From 219c54411bb765bebd7813ad3e49ab05acf0b150 Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Sun, 28 Jul 2019 17:14:42 +0200 Subject: Permissions: Added models and migrations --- src/Helpers/Authenticator.php | 2 +- src/Models/Auth/Permission.php | 57 ++++++++++++++++++++++++ src/Models/Auth/Role.php | 71 ++++++++++++++++++++++++++++++ src/Models/BaseModel.php | 3 ++ src/Models/Team.php | 99 ++++++++++++++++++++++++++++++++++++++++++ src/Models/User/User.php | 55 ++++++++++++++++++++++- 6 files changed, 285 insertions(+), 2 deletions(-) create mode 100644 src/Models/Auth/Permission.php create mode 100644 src/Models/Auth/Role.php create mode 100644 src/Models/Team.php (limited to 'src') 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 @@ +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 @@ +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 @@ +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) @@ -74,6 +82,51 @@ class User extends BaseModel ->withDefault(); } + /** + * 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 */ -- cgit v1.2.3-54-g00ecf