wyyl/beike/Admin/Repositories/AdminRoleRepo.php

92 lines
2.3 KiB
PHP

<?php
/**
* AdminRoleRepo.php
*
* @copyright 2022 beikeshop.com - All Rights Reserved
* @link https://beikeshop.com
* @author Edward Yang <yangjin@guangda.work>
* @created 2022-08-01 21:12:11
* @modified 2022-08-01 21:12:11
*/
namespace Beike\Admin\Repositories;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class AdminRoleRepo
{
/**
* 创建新角色
*
* @param $data
* @return Role
* @throws \Exception
*/
public static function createAdminRole($data): Role
{
$adminRole = Role::findOrCreate($data['name'], 'web_admin');
$permissions = array_merge($data['core_permissions'], $data['plugin_permissions']);
self::syncPermissions($adminRole, $permissions);
return $adminRole;
}
/**
* 编辑新角色
*
* @param $data
* @return Role
* @throws \Exception
*/
public static function updateAdminRole($data): Role
{
$adminRole = Role::findById($data['id']);
$adminRole->update([
'name' => $data['name'],
'guard_name' => 'web_admin',
]);
$permissions = array_merge($data['core_permissions'], $data['plugin_permissions']);
self::syncPermissions($adminRole, $permissions);
return $adminRole;
}
/**
* 同步所有权限
*
* @param Role $adminRole
* @param $permissions
* @throws \Exception
*/
private static function syncPermissions(Role $adminRole, $permissions)
{
$items = [];
foreach ($permissions as $groupedPermissions) {
foreach ($groupedPermissions['permissions'] as $groupedPermission) {
if ($groupedPermission['selected']) {
$code = $groupedPermission['code'];
Permission::findOrCreate($code);
$items[] = $code;
}
}
}
if (empty($items)) {
throw new \Exception(trans('admin/role.select_one_at_least'));
}
$adminRole->syncPermissions($items);
}
/**
* 删除角色
*
* @param $adminRoleId
*/
public static function deleteAdminRole($adminRoleId)
{
$adminRole = Role::query()->find($adminRoleId);
$adminRole->delete();
}
}