primaryKey; $cacheKey = 'admin_roles_for_user_'.$this->$userPrimaryKey; return Cache::tags(Config::get('admin.role_user_table'))->remember($cacheKey, Config::get('admin.cache.ttl'), function () { return $this->roles()->get(); }); } public function save(array $options = []) { //both inserts and updates $result = parent::save($options); Cache::tags(Config::get('admin.role_user_table'))->flush(); return $result; } public function delete(array $options = []) { //soft or hard $result = parent::delete($options); Cache::tags(Config::get('admin.role_user_table'))->flush(); return $result; } public function restore() { //soft delete undo's $result = parent::restore(); Cache::tags(Config::get('admin.role_user_table'))->flush(); return $result; } /** * 与角色的多对多关系 * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ public function roles() { return $this->belongsToMany(Config::get('admin.role'), Config::get('admin.role_user_table'), Config::get('admin.user_foreign_key'), Config::get('admin.role_foreign_key')); } /** * 当删除的时候,把用户关系也删除 * * @return void|bool */ public static function boot() { parent::boot(); static::deleting(function($user) { if (!method_exists(Config::get('auth.providers.users.model'), 'bootSoftDeletes')) { $user->roles()->sync([]); } return true; }); } /** * 检查用户是是否有角色. * * @param string|array $name 角色名. * @param bool $requireAll 是否有全部请求权限 * * @return bool */ public function hasRole($name, $requireAll = false) { if (is_array($name)) { foreach ($name as $roleName) { $hasRole = $this->hasRole($roleName); if ($hasRole && !$requireAll) { return true; } elseif (!$hasRole && $requireAll) { return false; } } // If we've made it this far and $requireAll is FALSE, then NONE of the roles were found // If we've made it this far and $requireAll is TRUE, then ALL of the roles were found. // Return the value of $requireAll; return $requireAll; } else { foreach ($this->cachedRoles() as $role) { if ($role->name == $name) { return true; } } } return false; } /** * 检查用户是否有权限 * * @param string|array $permission 权限名 * @param bool $requireAll 是否有全部请求权限 * * @return bool */ public function can($permission, $requireAll = false) { if (is_array($permission)) { foreach ($permission as $permName) { $hasPerm = $this->can($permName); if ($hasPerm && !$requireAll) { return true; } elseif (!$hasPerm && $requireAll) { return false; } } // If we've made it this far and $requireAll is FALSE, then NONE of the perms were found // If we've made it this far and $requireAll is TRUE, then ALL of the perms were found. // Return the value of $requireAll; return $requireAll; } else { foreach ($this->cachedRoles() as $role) { // Validate against the Permission table foreach ($role->cachedPermissions() as $perm) { if (str_is( $permission, $perm->name) ) { return true; } } } } return false; } /** * 保存角色 * * @param mixed $roles */ public function saveRoles($roles) { if (!empty($roles)) { $this->roles()->sync($roles); } else { $this->roles()->detach(); } } }