X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/80865b30a5d6a82e86d21e272ae58977d4430a64..refs/pull/261/head:/app/Role.php diff --git a/app/Role.php b/app/Role.php index 270e4e0b8..bf9685ee2 100644 --- a/app/Role.php +++ b/app/Role.php @@ -1,8 +1,5 @@ -belongsToMany('BookStack\User'); + return $this->belongsToMany(User::class); } /** - * The permissions that belong to the role. + * Get all related JointPermissions. + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ + public function jointPermissions() + { + return $this->hasMany(JointPermission::class); + } + + /** + * The RolePermissions that belong to the role. */ public function permissions() { - return $this->belongsToMany('BookStack\Permission'); + return $this->belongsToMany(RolePermission::class, 'permission_role', 'role_id', 'permission_id'); } /** * Check if this role has a permission. - * @param $permission + * @param $permissionName + * @return bool */ - public function hasPermission($permission) + public function hasPermission($permissionName) { - return $this->permissions->pluck('name')->contains($permission); + $permissions = $this->getRelationValue('permissions'); + foreach ($permissions as $permission) { + if ($permission->getRawAttribute('name') === $permissionName) return true; + } + return false; } /** * Add a permission to this role. - * @param Permission $permission + * @param RolePermission $permission */ - public function attachPermission(Permission $permission) + public function attachPermission(RolePermission $permission) { $this->permissions()->attach($permission->id); } + /** + * Detach a single permission from this role. + * @param RolePermission $permission + */ + public function detachPermission(RolePermission $permission) + { + $this->permissions()->detach($permission->id); + } + /** * Get the role object for the specified role. * @param $roleName - * @return mixed + * @return Role */ public static function getRole($roleName) { return static::where('name', '=', $roleName)->first(); } + + /** + * Get the role object for the specified system role. + * @param $roleName + * @return Role + */ + public static function getSystemRole($roleName) + { + return static::where('system_name', '=', $roleName)->first(); + } + + /** + * Get all visible roles + * @return mixed + */ + public static function visible() + { + return static::where('hidden', '=', false)->orderBy('name')->get(); + } + }