<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; use DB; class PermController extends Controller { // 检查用户是否具有系统访问权限 public function checkAccess($request) { $user_id = $request->user->userId; $role = $this->getUserRole($request); if ($role == 1) return true; // 超级管理员或系统管理员直接进入 $userPerms = $this->getUserAllPerms($user_id, $role); if (!$userPerms) return false; if (in_array('apply_access', $userPerms)) return true; // 访问权限ID是否存在 return false; } // 获取系统信息 public function getBusinessInfo() { // 根据域名查询系统业务ID $business = DB::table('t_business_config')->where('url', Config('website.order_url'))->first(); return !empty($business) ? $business : false; } // 获取用户角色 public function getUserRole(Request $request) { $uid = $request->user->userId; $email = $request->user->email; if ($email == 'admin@ichunt.com') { return 1; } // 根据域名查询系统业务ID $business = $this->getBusinessInfo(); if ($business) { $bid = $business->bid; // 权限系统配置的管理帐号 $adminAccount = json_decode($business->admin, true); if (in_array($email, $adminAccount)) { return 1; } // 根据用户ID和业务ID查看角色 $userPerm = DB::table('t_user_perm')->where(['userId' => $uid, 'bid' => $bid])->first(); if (empty($userPerm)) { return 0; } else { if ($userPerm->roles == 'null') return 0; $role = json_decode($userPerm->roles, true); foreach ($role as $v) { $department = DB::table('t_role_perm')->where(['roleId' => $v, 'bid' => $bid])->first(); if ($department->name == '管理员') { return 1; }else if ($department->name == '经理') { return 2; } else if ($department->name == '交易员') { return 3; } else if ($department->name == '客服') { return 4; } else if ($department->name == '测试') { return 5; } else if ($department->name == '京东自营') { return 6; } else if ($department->name == '自营客服') { return 7; } else if ($department->name == '运营助理') { return 8; } else if ($department->name == '财务') { return 9; } else { return 0; } } } } return 0; } // 获取所有角色用户集合 public function getRoleUsers(Request $request, $roleName) { // 根据域名查询系统业务ID $business = $this->getBusinessInfo(); $userId = array(); $roleUsers = array(); if ($business) { $bid = $business->bid; $role = DB::table('t_role_perm')->where(['bid' => $bid, 'name' => $roleName])->first(); $roleId = $role->roleId; $user = DB::select("SELECT * FROM `t_user_perm` WHERE `bid` = $bid AND `roles` REGEXP $roleId"); if ($user) { foreach ($user as $v) { $userId[] = $v->userId; } if ($userId) { foreach ($userId as $id) { $userInfo = DB::table('user_info')->where('userId', $id)->select('userId', 'name', 'status')->first(); // 判断用户是否已离职 4为离职状态 // if ($userInfo->status != 4) { $roleUsers[] = $userInfo; // } continue; } } } } return $roleUsers; } // 获取权限菜单 public function getPermMenu($menus, $user_id) { $userPerms = $this->getUserAllPerms($user_id); if ($userPerms) { return $this->handleMenus($menus, $userPerms); } return false; } // 获取用户所有权限 public function getUserAllPerms($user_id, $role=0) { // 根据域名查询系统业务ID $business = $this->getBusinessInfo(); if ($business) { if ($role != 1) { $bid = $business->bid; $url = Config('website.perm_api').$user_id.'/'.$bid; $userPerms = json_decode(curlApi($url), true); if ($userPerms && $userPerms['retcode'] == 0) { return $userPerms['data']['perms']; } } else { // 获取管理员所有权限 return $this->getAllPerms(json_decode($business->configs, true)); } } return false; } // 获取系统配置权限 public function getAllPerms($configs) { $perms = []; foreach ($configs as $k => $v) { $perm_a = []; $perm_b = []; if (isset($v['childs']) && count($v['childs']) > 0) { $perm_b = $this->getAllPerms($v['childs']); } else { $perm_a[] = $v['permId']; } $perms = array_merge($perms, array_merge($perm_a, $perm_b)); } return $perms; } // 处理菜单 public function handleMenus($menus, $perms) { foreach ($menus as $k => $v) { if (strlen($v->href) > 2) { if (preg_match('/\/web\//', $v->href)) { $permId = str_replace('/web/','',$v->href); } else { $permId = str_replace('/', '', $v->href); } // 查看菜单权限 $permId = $permId . '_check'; if (!in_array($permId, $perms)) { unset($menus[$k]); } } if (count($v->childs) > 0) { $menus[$k]->childs = array_values($this->handleMenus($v->childs, $perms)); if (empty($menus[$k]->childs)) { unset($menus[$k]); } } } return array_values($menus); } }