diff --git a/src/Member/Commands/PermissionCommand.php b/src/Member/Commands/PermissionCommand.php index 97220d02c1167988804111add4aef77f143f6b5e..cbebe8accff3e0db18d4b2a8529830d8396319e2 100644 --- a/src/Member/Commands/PermissionCommand.php +++ b/src/Member/Commands/PermissionCommand.php @@ -76,16 +76,35 @@ class PermissionCommand extends Command } $i = 0; - foreach ($permissions as $permission) { - if (! isset($permission['display_name']) || ! isset($permission['name']) || empty($permission['display_name']) || empty($permission['name'])) { + + $frontendPermissions = array_get($permissions, 'frontend', []); + $adminPermissions = array_get($permissions, 'admin', []); + + // 添加前台权限 + foreach ($frontendPermissions as $frontendPermission) { + if (! isset($frontendPermission['display_name']) || ! isset($frontendPermission['name']) || empty($frontendPermission['display_name']) || empty($frontendPermission['name'])) { + continue; + } + + if (Permission::where('name', $frontendPermission['name'])->count()) { + continue; + } + + Permission::addPermission($frontendPermission['name'], $frontendPermission['display_name'], isset($frontendPermission['description']) ? $frontendPermission['description'] : ''); + $i++; + } + + // 添加后台权限 + foreach ($adminPermissions as $adminPermission) { + if (! isset($adminPermission['display_name']) || ! isset($adminPermission['name']) || empty($adminPermission['display_name']) || empty($adminPermission['name'])) { continue; } - if (Permission::where('name', $permission['name'])->count()) { + if (Permission::whereAdmin($adminPermission['name'])->count()) { continue; } - Permission::addPermission($permission['name'], $permission['display_name'], isset($permission['description']) ? $permission['description'] : ''); + Permission::addAdminPermission($adminPermission['name'], $adminPermission['display_name'], isset($adminPermission['description']) ? $adminPermission['description'] : ''); $i++; } diff --git a/src/Member/Member.php b/src/Member/Member.php index e07420fd46cc3aadd79f71311cb66eba65b1f153..ba657728414eeaa35d2fb5937ed01670da6f7c4f 100644 --- a/src/Member/Member.php +++ b/src/Member/Member.php @@ -58,12 +58,21 @@ class Member extends Authenticatable return $this->newQuery()->where('name', $name)->first(); } - public function cachedPermissions() + /** + * 获取缓存的用户的权限的动态键 + * + * @return string + */ + public function getCachePermissionKey() { $memberPrimaryKey = $this->primaryKey; - $cacheKey = 'permissions_for_member_' . $this->$memberPrimaryKey; - return Cache::tags('member_permission')->remember($cacheKey, 60, function () { + return 'permissions_for_member_' . $this->$memberPrimaryKey; + } + + public function cachedPermissions() + { + return Cache::remember($this->getCachePermissionKey(), 60, function () { return $this->permissions()->get(); }); } @@ -73,17 +82,17 @@ class Member extends Authenticatable //both inserts and updates $result = parent::save($options); - Cache::tags('member_permission')->flush(); + Cache::forget($this->getCachePermissionKey()); return $result; } public function delete() { - //soft or hard + // soft or hard $result = parent::delete(); - Cache::tags('member_permission')->flush(); + Cache::forget($this->getCachePermissionKey()); return $result; } @@ -93,7 +102,7 @@ class Member extends Authenticatable //soft delete undo's $result = parent::restore(); - Cache::tags('member_permission')->flush(); + Cache::forget($this->getCachePermissionKey()); return $result; } diff --git a/src/Member/Permission.php b/src/Member/Permission.php index ad47b7d8a41abde5a65a0f90ffbb63247c6b45ee..3f477f8790c0aba1e81a973def50413d55eb7d50 100644 --- a/src/Member/Permission.php +++ b/src/Member/Permission.php @@ -25,6 +25,8 @@ use Notadd\Foundation\Database\Model; */ class Permission extends Model { + const ADMIN_PREFIX = 'admin-'; + protected $table = 'permissions'; protected $fillable = [ @@ -53,4 +55,31 @@ class Permission extends Model return $permission; } + + /** + * 添加后台权限 + * + * @param $name + * @param null $display_name + * @param null $description + * + * @return \Notadd\Foundation\Member\Permission + */ + public static function addAdminPermission($name, $display_name = null, $description = null) + { + return static::addPermission(static::ADMIN_PREFIX . $name, $display_name, $description); + } + + /** + * 查询后台权限 + * + * @param $query + * @param $name + * + * @return mixed + */ + public function scopeWhereAdmin($query, $name) + { + return $query->where('name', static::ADMIN_PREFIX . $name); + } }