1
0
Fork 0

party_cate permission

master
panliang 2023-12-10 11:59:15 +08:00
parent f88128a370
commit 6938324dd6
12 changed files with 100 additions and 22 deletions

View File

@ -6,5 +6,11 @@ use Slowlyo\OwlAdmin\Controllers\AuthController as AdminAuthController;
class AuthController extends AdminAuthController class AuthController extends AdminAuthController
{ {
public function logout(): \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
{
Cache::forget('parte_cate_id_permission');
$this->guard()->user()->currentAccessToken()->delete();
return $this->response()->successMessage();
}
} }

View File

@ -34,12 +34,7 @@ class PartyCateController extends AdminController
public function index() public function index()
{ {
$user = Admin::user(); request()->offsetSet('ids', $this->service->catePermissions());
// 判断当前账户拥有的支部权限
if (!$user->can('party_cate_all')) {
$permissions = $user->allPermissions()->where(fn ($item) => Str::startsWith($item->slug, 'party_cate_') && $item->http_method)->pluck('http_method')->all();
request()->offsetSet('ids', $permissions);
}
if ($this->actionOfGetData()) { if ($this->actionOfGetData()) {
return $this->response()->success($this->service->list()); return $this->response()->success($this->service->list());
} }

View File

@ -2,7 +2,7 @@
namespace App\Admin\Controllers; namespace App\Admin\Controllers;
use App\Admin\Services\PartyUserService; use App\Admin\Services\{PartyUserService, PartyCateService};
use App\Models\PartyCate; use App\Models\PartyCate;
use Slowlyo\OwlAdmin\Controllers\AdminController; use Slowlyo\OwlAdmin\Controllers\AdminController;
use Slowlyo\OwlAdmin\Renderers\Form; use Slowlyo\OwlAdmin\Renderers\Form;
@ -17,6 +17,23 @@ class PartyUserController extends AdminController
protected $cateOptions; protected $cateOptions;
public function index()
{
if (!request()->filled('cate_id')) {
$cateIds = PartyCateService::make()->catePermissions();
request()->offsetSet('cate_id', $cateIds);
}
if ($this->actionOfGetData()) {
return $this->response()->success($this->service->list());
}
if ($this->actionOfExport()) {
return $this->export();
}
return $this->response()->success($this->list());
}
public function list(): Page public function list(): Page
{ {
$crud = $this->baseCRUD() $crud = $this->baseCRUD()
@ -79,7 +96,8 @@ class PartyUserController extends AdminController
public function getCateOptions() public function getCateOptions()
{ {
if (!$this->cateOptions) { if (!$this->cateOptions) {
$this->cateOptions = PartyCate::select(['id as value', 'name as label'])->get(); $cateIds = PartyCateService::make()->catePermissions();
$this->cateOptions = PartyCate::select(['id as value', 'name as label'])->filter(['ids' => $cateIds])->get();
} }
return $this->cateOptions; return $this->cateOptions;

View File

@ -2,7 +2,7 @@
namespace App\Admin\Controllers; namespace App\Admin\Controllers;
use App\Admin\Services\UserScoreService; use App\Admin\Services\{UserScoreService, PartyCateService};
use App\Enums\CheckStatus; use App\Enums\CheckStatus;
use App\Exceptions\BaseException; use App\Exceptions\BaseException;
use App\Models\PartyUser; use App\Models\PartyUser;
@ -23,6 +23,23 @@ class UserScoreController extends AdminController
protected $cateOptions; protected $cateOptions;
public function index()
{
if (!request()->filled('cate_id')) {
$cateIds = PartyCateService::make()->catePermissions();
request()->offsetSet('cate_id', $cateIds);
}
if ($this->actionOfGetData()) {
return $this->response()->success($this->service->list());
}
if ($this->actionOfExport()) {
return $this->export();
}
return $this->response()->success($this->list());
}
public function list(): Page public function list(): Page
{ {
$crud = $this->baseCRUD() $crud = $this->baseCRUD()
@ -154,7 +171,8 @@ class UserScoreController extends AdminController
public function getUserOptions() public function getUserOptions()
{ {
if (!$this->userOptions) { if (!$this->userOptions) {
$this->userOptions = PartyUser::select(['id as value', 'name as label'])->get(); $cateIds = PartyCateService::make()->catePermissions();
$this->userOptions = PartyUser::select(['id as value', 'name as label'])->filter(['cate' => $cateIds])->get();
} }
return $this->userOptions; return $this->userOptions;
@ -163,7 +181,8 @@ class UserScoreController extends AdminController
public function getCateOptions() public function getCateOptions()
{ {
if (!$this->cateOptions) { if (!$this->cateOptions) {
$this->cateOptions = PartyCate::select(['id as value', 'name as label'])->get(); $cateIds = PartyCateService::make()->catePermissions();
$this->cateOptions = PartyCate::select(['id as value', 'name as label'])->filter(['ids' => $cateIds])->get();
} }
return $this->cateOptions; return $this->cateOptions;

View File

@ -10,6 +10,9 @@ use App\Models\UserRank;
use App\Models\UserScore; use App\Models\UserScore;
use Slowlyo\OwlAdmin\Models\AdminPermission; use Slowlyo\OwlAdmin\Models\AdminPermission;
use Slowlyo\OwlAdmin\Services\AdminPermissionService; use Slowlyo\OwlAdmin\Services\AdminPermissionService;
use Slowlyo\OwlAdmin\Admin;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Cache;
class PartyCateService extends BaseService class PartyCateService extends BaseService
{ {
@ -31,17 +34,42 @@ class PartyCateService extends BaseService
$info = $this->modelName::create($data); $info = $this->modelName::create($data);
// 创建权限 $this->createPermission($info);
$parent = AdminPermission::firstOrCreate(['slug' => 'party_cate'], ['name' => '党支部']);
return true;
}
/**
* 创建权限
*/
public function createPermission(PartyCate $info)
{
$parent = AdminPermission::firstOrCreate(['slug' => 'party_cate_list'], ['name' => '党支部']);
AdminPermissionService::make()->store([ AdminPermissionService::make()->store([
'slug' => 'party_cate_' . $info->id, 'slug' => 'party_cate_' . $info->id,
'name' => $info->name, 'name' => $info->name,
'parent_id' => $parent->id, 'parent_id' => $parent->id,
'order' => 1, 'order' => 2,
'http_method' => $info->id, 'http_method' => $info->id,
]); ]);
}
return true; /**
* 当前用户拥有的支部权限 id
*
* @return array null: 全部权限, []: 支部id
*/
public function catePermissions()
{
$user = Admin::user();
// 判断当前账户拥有的支部权限
if ($user->can('party_cate_all')) {
return null;
}
$permissions = Cache::get('parte_cate_id_permission', function () use ($user) {
return $user->allPermissions()->where(fn ($item) => Str::startsWith($item->slug, 'party_cate_') && $item->http_method)->pluck('http_method')->all();
});
return $permissions;
} }
public function preDelete(array $ids) public function preDelete(array $ids)

View File

@ -14,6 +14,8 @@ Route::group([
$router->get('login', [App\Admin\Controllers\AuthController::class, 'loginPage']); $router->get('login', [App\Admin\Controllers\AuthController::class, 'loginPage']);
$router->get('logout', [App\Admin\Controllers\AuthController::class, 'logout']);
$router->resource('system/settings', \App\Admin\Controllers\SettingController::class); $router->resource('system/settings', \App\Admin\Controllers\SettingController::class);
$router->resource('system/admin_roles', \App\Admin\Controllers\AdminRoleController::class); $router->resource('system/admin_roles', \App\Admin\Controllers\AdminRoleController::class);

View File

@ -21,6 +21,6 @@ class PartyUserFilter extends ModelFilter
public function cate($id) public function cate($id)
{ {
$this->where('cate_id', $id); $this->whereIn('cate_id', is_array($id) ? $id : explode(',', $id));
} }
} }

View File

@ -27,7 +27,7 @@ class UserScoreFilter extends ModelFilter
public function cate($id) public function cate($id)
{ {
$this->where('cate_id', $id); $this->whereIn('cate_id', is_array($id) ? $id : explode(',', $id));
} }
public function checkStatus($id) public function checkStatus($id)

View File

@ -5,13 +5,14 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use App\Traits\HasDateTimeFormatter; use App\Traits\HasDateTimeFormatter;
use EloquentFilter\Filterable; use EloquentFilter\Filterable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
/** /**
* 党支部 * 党支部
*/ */
class PartyCate extends Model class PartyCate extends Model
{ {
use HasDateTimeFormatter, Filterable; use HasDateTimeFormatter, Filterable, HasFactory;
protected $fillable = ['name', 'master_id', 'plan_id', 'remarks', 'current_score', 'score', 'scores']; protected $fillable = ['name', 'master_id', 'plan_id', 'remarks', 'current_score', 'score', 'scores'];

View File

@ -4,6 +4,7 @@ namespace Database\Factories;
use App\Models\PartyCate; use App\Models\PartyCate;
use Illuminate\Database\Eloquent\Factories\Factory; use Illuminate\Database\Eloquent\Factories\Factory;
use App\Admin\Services\PartyCateService;
/** /**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\PartyCate> * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\PartyCate>
@ -24,4 +25,11 @@ class PartyCateFactory extends Factory
'name' => $faker->streetName, 'name' => $faker->streetName,
]; ];
} }
public function configure(): static
{
return $this->afterCreating(function (PartyCate $cate) {
PartyCateService::make()->createPermission($cate);
});
}
} }

View File

@ -20,7 +20,7 @@ class PartyUserSeeder extends Seeder
{ {
PartyCate::truncate(); PartyCate::truncate();
PartyUser::truncate(); PartyUser::truncate();
(new PartyCateFactory())->count(20)->create(); PartyCate::factory()->count(20)->create();
(new PartyUserFactory())->count(100)->create([ (new PartyUserFactory())->count(100)->create([
'scores' => [ 'scores' => [
'score_cate_1' => 0, 'score_cate_1' => 0,

View File

@ -19,9 +19,7 @@ class PermissionSeeder extends Seeder
DB::table('admin_role_permissions')->truncate(); DB::table('admin_role_permissions')->truncate();
$list = [ $list = [
['name' => '主页', 'slug' => 'dashboard'], ['name' => '主页', 'slug' => 'dashboard'],
['name' => '支部管理', 'slug' => 'party_cate', 'children' => [ ['name' => '支部管理', 'slug' => 'party_cate'],
['name' => '全部', 'slug' => 'party_cate_all'],
]],
['name' => '党员管理', 'slug' => 'party_user'], ['name' => '党员管理', 'slug' => 'party_user'],
['name' => '审核评定', 'slug' => 'user_score'], ['name' => '审核评定', 'slug' => 'user_score'],
['name' => '信息管理', 'slug' => 'article'], ['name' => '信息管理', 'slug' => 'article'],
@ -37,6 +35,9 @@ class PermissionSeeder extends Seeder
['name' => '字典管理', 'slug' => 'keyword'], ['name' => '字典管理', 'slug' => 'keyword'],
// ['name' => '配置管理', 'slug' => 'admin_setting'], // ['name' => '配置管理', 'slug' => 'admin_setting'],
]], ]],
['name' => '支部权限', 'slug' => 'party_cate_list', 'children' => [
['name' => '全部', 'slug' => 'party_cate_all'],
]],
]; ];
$this->createByTree($list); $this->createByTree($list);