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
{
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()
{
$user = Admin::user();
// 判断当前账户拥有的支部权限
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);
}
request()->offsetSet('ids', $this->service->catePermissions());
if ($this->actionOfGetData()) {
return $this->response()->success($this->service->list());
}

View File

@ -2,7 +2,7 @@
namespace App\Admin\Controllers;
use App\Admin\Services\PartyUserService;
use App\Admin\Services\{PartyUserService, PartyCateService};
use App\Models\PartyCate;
use Slowlyo\OwlAdmin\Controllers\AdminController;
use Slowlyo\OwlAdmin\Renderers\Form;
@ -17,6 +17,23 @@ class PartyUserController extends AdminController
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
{
$crud = $this->baseCRUD()
@ -79,7 +96,8 @@ class PartyUserController extends AdminController
public function getCateOptions()
{
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;

View File

@ -2,7 +2,7 @@
namespace App\Admin\Controllers;
use App\Admin\Services\UserScoreService;
use App\Admin\Services\{UserScoreService, PartyCateService};
use App\Enums\CheckStatus;
use App\Exceptions\BaseException;
use App\Models\PartyUser;
@ -23,6 +23,23 @@ class UserScoreController extends AdminController
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
{
$crud = $this->baseCRUD()
@ -154,7 +171,8 @@ class UserScoreController extends AdminController
public function getUserOptions()
{
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;
@ -163,7 +181,8 @@ class UserScoreController extends AdminController
public function getCateOptions()
{
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;

View File

@ -10,6 +10,9 @@ use App\Models\UserRank;
use App\Models\UserScore;
use Slowlyo\OwlAdmin\Models\AdminPermission;
use Slowlyo\OwlAdmin\Services\AdminPermissionService;
use Slowlyo\OwlAdmin\Admin;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Cache;
class PartyCateService extends BaseService
{
@ -31,17 +34,42 @@ class PartyCateService extends BaseService
$info = $this->modelName::create($data);
// 创建权限
$parent = AdminPermission::firstOrCreate(['slug' => 'party_cate'], ['name' => '党支部']);
$this->createPermission($info);
return true;
}
/**
* 创建权限
*/
public function createPermission(PartyCate $info)
{
$parent = AdminPermission::firstOrCreate(['slug' => 'party_cate_list'], ['name' => '党支部']);
AdminPermissionService::make()->store([
'slug' => 'party_cate_' . $info->id,
'name' => $info->name,
'parent_id' => $parent->id,
'order' => 1,
'order' => 2,
'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)

View File

@ -14,6 +14,8 @@ Route::group([
$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/admin_roles', \App\Admin\Controllers\AdminRoleController::class);

View File

@ -21,6 +21,6 @@ class PartyUserFilter extends ModelFilter
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)
{
$this->where('cate_id', $id);
$this->whereIn('cate_id', is_array($id) ? $id : explode(',', $id));
}
public function checkStatus($id)

View File

@ -5,13 +5,14 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Traits\HasDateTimeFormatter;
use EloquentFilter\Filterable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
/**
* 党支部
*/
class PartyCate extends Model
{
use HasDateTimeFormatter, Filterable;
use HasDateTimeFormatter, Filterable, HasFactory;
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 Illuminate\Database\Eloquent\Factories\Factory;
use App\Admin\Services\PartyCateService;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\PartyCate>
@ -24,4 +25,11 @@ class PartyCateFactory extends Factory
'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();
PartyUser::truncate();
(new PartyCateFactory())->count(20)->create();
PartyCate::factory()->count(20)->create();
(new PartyUserFactory())->count(100)->create([
'scores' => [
'score_cate_1' => 0,

View File

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