147 lines
4.8 KiB
PHP
147 lines
4.8 KiB
PHP
|
<?php
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | Niucloud-admin 企业快速开发的saas管理平台
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | 官方网址:https://www.niucloud-admin.com
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | Author: Niucloud Team
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
|
|||
|
namespace app\service\admin\user;
|
|||
|
|
|||
|
|
|||
|
use app\model\sys\SysRole;
|
|||
|
use app\model\sys\SysUserRole;
|
|||
|
use app\service\admin\sys\RoleService;
|
|||
|
use core\base\BaseAdminService;
|
|||
|
use core\exception\AdminException;
|
|||
|
use core\exception\CommonException;
|
|||
|
use think\facade\Cache;
|
|||
|
use think\Model;
|
|||
|
|
|||
|
/**
|
|||
|
* 用户服务层
|
|||
|
* Class BaseService
|
|||
|
* @package app\service
|
|||
|
*/
|
|||
|
class UserRoleService extends BaseAdminService
|
|||
|
{
|
|||
|
public static $role_cache_name = 'user_role_cache';
|
|||
|
|
|||
|
public function __construct()
|
|||
|
{
|
|||
|
parent::__construct();
|
|||
|
$this->model = new SysUserRole();
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 添加用户权限(添加站点用户)
|
|||
|
* @param int $uid
|
|||
|
* @param array $data
|
|||
|
* @param int $site_id
|
|||
|
* @return true
|
|||
|
*/
|
|||
|
public function add(int $uid, array $data, int $site_id = 0){
|
|||
|
$user_role_model = new SysUserRole();
|
|||
|
$is_exist = $user_role_model->where([ ['uid', '=', $uid], ['site_id', '=', $site_id] ])->count();
|
|||
|
if ($is_exist) throw new CommonException('SITE_USER_EXIST');
|
|||
|
|
|||
|
$is_admin = $data['is_admin'] ?? 0;
|
|||
|
$role_data = array(
|
|||
|
'uid' => $uid,
|
|||
|
'is_admin' => $is_admin,
|
|||
|
'site_id' => $site_id == 0 ? $this->site_id : $site_id
|
|||
|
);
|
|||
|
if(!$is_admin){
|
|||
|
//校验权限越界
|
|||
|
$role_data['role_ids'] = $data['role_ids'] ?? [];
|
|||
|
}
|
|||
|
$user_role_model->save($role_data);
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 更新用户权限(编辑站点用户)
|
|||
|
* @param int $site_id
|
|||
|
* @param int $uid
|
|||
|
* @param array $role_ids
|
|||
|
* @return bool
|
|||
|
*/
|
|||
|
public function edit(int $site_id, int $uid, array $role_ids){
|
|||
|
$user_role = $this->model->where([['uid', '=', $uid], ['site_id', '=', $site_id]])->findOrEmpty();
|
|||
|
if ($user_role->isEmpty())
|
|||
|
throw new AdminException('NO_SITE_USER_ROLE');
|
|||
|
|
|||
|
$is_admin = $user_role->is_admin;
|
|||
|
if($is_admin)//超级管理员不允许改动权限
|
|||
|
throw new AdminException('ADMIN_NOT_ALLOW_EDIT_ROLE');
|
|||
|
if (!empty(array_diff_assoc($role_ids, $user_role->role_ids))) {
|
|||
|
//校验权限越界
|
|||
|
$user_role->save(['role_ids' => $role_ids]);
|
|||
|
$cache_name = 'user_role_'.$uid.'_'.$site_id;
|
|||
|
Cache::delete($cache_name);
|
|||
|
return true;
|
|||
|
}
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 用户权限信息(获取用户对应站点权限)
|
|||
|
* @param int $site_id
|
|||
|
* @param int $uid
|
|||
|
* @return mixed
|
|||
|
*/
|
|||
|
public function getUserRole(int $site_id, int $uid){
|
|||
|
$cache_name = 'user_role_'.$uid.'_'.$site_id;
|
|||
|
return cache_remember(
|
|||
|
$cache_name,
|
|||
|
function() use($uid, $site_id) {
|
|||
|
$user_role_model = new SysUserRole();
|
|||
|
$where = array(
|
|||
|
['uid', '=', $uid],
|
|||
|
['site_id', '=', $site_id]
|
|||
|
);
|
|||
|
return $user_role_model->where($where)->findOrEmpty()->toArray();
|
|||
|
},
|
|||
|
[self::$role_cache_name, RoleService::$cache_tag_name.$this->site_id]
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取用户默认站点(切勿用于平台管理端)
|
|||
|
* @param int $uid
|
|||
|
* @return SysUserRole|array|mixed|Model
|
|||
|
*/
|
|||
|
public function getUserDefaultSiteId(int $uid){
|
|||
|
$user_role_model = new SysUserRole();
|
|||
|
$default_site_id = $this->request->defaultSiteId();
|
|||
|
return $user_role_model->where([['uid', '=', $uid], ['site_id', '<>', $default_site_id]])->findOrEmpty()?->site_id;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 通过角色id组获取角色
|
|||
|
* @param array $role_ids
|
|||
|
* @param int $site_id
|
|||
|
* @return mixed
|
|||
|
*/
|
|||
|
public function getRoleByUserRoleIds(array $role_ids, int $site_id){
|
|||
|
sort($role_ids);
|
|||
|
$cache_name = 'role_by_ids_'.md5(implode(',', $role_ids)).'_'.$site_id;
|
|||
|
return cache_remember(
|
|||
|
$cache_name,
|
|||
|
function() use($role_ids, $site_id) {
|
|||
|
$where = array(
|
|||
|
['role_id', 'in', $role_ids],
|
|||
|
['site_id', '=', $site_id]
|
|||
|
);
|
|||
|
return SysRole::where($where)->column('role_name');
|
|||
|
},
|
|||
|
[self::$role_cache_name, RoleService::$cache_tag_name.$this->site_id]
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|