123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- <?php
- // +----------------------------------------------------------------------
- // | Niucloud-admin 企业快速开发的saas管理平台
- // +----------------------------------------------------------------------
- // | 官方网址:https://www.niucloud.com
- // +----------------------------------------------------------------------
- // | niucloud团队 版权所有 开源版本可自由商用
- // +----------------------------------------------------------------------
- // | Author: Niucloud Team
- // +----------------------------------------------------------------------
- namespace app\service\admin\user;
- use app\dict\sys\UserDict;
- 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,
- 'status' => $data['status'] ?? UserDict::ON
- );
- 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]
- );
- }
- }
|