| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- <?php
- namespace App\Models\Traits;
- use Illuminate\Support\Facades\Cache;
- use Illuminate\Support\Facades\Config;
- trait AdminUsersTrait
- {
- public function cachedRoles()
- {
- $userPrimaryKey = $this->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();
- }
- }
- }
|