'guest', 'name' => 'Guest' ]); } /** * The roles that belong to the user. */ public function roles() { return $this->belongsToMany('BookStack\Role'); } /** * Check if the user has a role. * @param $role * @return mixed */ public function hasRole($role) { return $this->roles->pluck('name')->contains($role); } /** * Get all permissions belonging to a the current user. * @param bool $cache * @return \Illuminate\Database\Eloquent\Relations\HasManyThrough */ public function permissions($cache = true) { if(isset($this->permissions) && $cache) return $this->permissions; $this->load('roles.permissions'); $permissions = $this->roles->map(function($role) { return $role->permissions; })->flatten()->unique(); $this->permissions = $permissions; return $permissions; } /** * Check if the user has a particular permission. * @param $permissionName * @return bool */ public function can($permissionName) { if ($this->email === 'guest') return false; return $this->permissions()->pluck('name')->contains($permissionName); } /** * Attach a role to this user. * @param Role $role */ public function attachRole(Role $role) { $this->attachRoleId($role->id); } /** * Attach a role id to this user. * @param $id */ public function attachRoleId($id) { $this->roles()->attach($id); } /** * Get the social account associated with this user. * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function socialAccounts() { return $this->hasMany('BookStack\SocialAccount'); } /** * Check if the user has a social account, * If a driver is passed it checks for that single account type. * @param bool|string $socialDriver * @return bool */ public function hasSocialAccount($socialDriver = false) { if ($socialDriver === false) { return $this->socialAccounts()->count() > 0; } return $this->socialAccounts()->where('driver', '=', $socialDriver)->exists(); } /** * Returns the user's avatar, * @param int $size * @return string */ public function getAvatar($size = 50) { if ($this->image_id === 0 || $this->image_id === '0' || $this->image_id === null) return '/user_avatar.png'; return $this->avatar->getThumb($size, $size, false); } /** * Get the avatar for the user. * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function avatar() { return $this->belongsTo('BookStack\Image', 'image_id'); } /** * Get the url for editing this user. * @return string */ public function getEditUrl() { return '/settings/users/' . $this->id; } /** * Get a shortened version of the user's name. * @param int $chars * @return string */ public function getShortName($chars = 8) { if (strlen($this->name) <= $chars) return $this->name; $splitName = explode(' ', $this->name); if (strlen($splitName[0]) <= $chars) return $splitName[0]; return ''; } }