mirror of
https://github.com/crmeb/CRMEB.git
synced 2026-10-29 05:50:50 +00:00
【程序目录】优化权限逻辑
This commit is contained in:
parent
954ce7ecbd
commit
3aa9d42b13
@ -35,8 +35,7 @@ class SystemRole extends AuthController
|
||||
|
||||
/**
|
||||
* 显示资源列表
|
||||
*
|
||||
* @return \think\Response
|
||||
* @return mixed
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
@ -49,9 +48,12 @@ class SystemRole extends AuthController
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示创建资源表单页.
|
||||
*
|
||||
* @return \think\Response
|
||||
* 显示创建资源表单页
|
||||
* @param SystemMenusServices $services
|
||||
* @return mixed
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
*/
|
||||
public function create(SystemMenusServices $services)
|
||||
{
|
||||
@ -88,10 +90,13 @@ class SystemRole extends AuthController
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示编辑资源表单页.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
* 显示编辑资源表单页
|
||||
* @param SystemMenusServices $services
|
||||
* @param $id
|
||||
* @return mixed
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
*/
|
||||
public function edit(SystemMenusServices $services, $id)
|
||||
{
|
||||
|
||||
@ -18,12 +18,18 @@ use crmeb\interfaces\MiddlewareInterface;
|
||||
|
||||
/**
|
||||
* 权限规则验证
|
||||
* Class AdminCkeckRoleMiddleware
|
||||
* Class AdminCheckRoleMiddleware
|
||||
* @package app\http\middleware
|
||||
*/
|
||||
class AdminCkeckRoleMiddleware implements MiddlewareInterface
|
||||
class AdminCheckRoleMiddleware implements MiddlewareInterface
|
||||
{
|
||||
|
||||
/**
|
||||
* 权限规则验证
|
||||
* @param Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
* @throws \throwable
|
||||
*/
|
||||
public function handle(Request $request, \Closure $next)
|
||||
{
|
||||
if (!$request->adminId() || !$request->adminInfo())
|
||||
@ -32,7 +38,7 @@ class AdminCkeckRoleMiddleware implements MiddlewareInterface
|
||||
if ($request->adminInfo()['level']) {
|
||||
/** @var SystemRoleServices $systemRoleService */
|
||||
$systemRoleService = app()->make(SystemRoleServices::class);
|
||||
$systemRoleService->verifiAuth($request);
|
||||
$systemRoleService->verifyAuth($request);
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
@ -74,6 +74,6 @@ Route::group('agent', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -109,6 +109,6 @@ Route::group('app', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -31,6 +31,6 @@ Route::group('cms', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -46,7 +46,7 @@ Route::group(function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
|
||||
@ -72,6 +72,6 @@ Route::group('diy', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -43,6 +43,6 @@ Route::group('export', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -35,6 +35,6 @@ Route::group('file', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -52,6 +52,6 @@ Route::group('finance', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -28,6 +28,6 @@ Route::group('freight', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -66,6 +66,6 @@ Route::group('live', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -192,6 +192,6 @@ Route::group('marketing', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -51,6 +51,6 @@ Route::group('merchant', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -46,6 +46,6 @@ Route::group('notify', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -109,7 +109,7 @@ Route::group('order', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -136,6 +136,6 @@ Route::group('refund', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -96,6 +96,6 @@ Route::group('product', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -63,6 +63,6 @@ Route::group('serve', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -192,6 +192,6 @@ Route::group('setting', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -74,6 +74,6 @@ Route::group('statistic', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -103,6 +103,6 @@ Route::group('system', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -145,6 +145,6 @@ Route::group('user', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -18,6 +18,6 @@ Route::group('widget', function () {
|
||||
})->middleware([
|
||||
\app\http\middleware\AllowOriginMiddleware::class,
|
||||
\app\adminapi\middleware\AdminAuthTokenMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCkeckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminCheckRoleMiddleware::class,
|
||||
\app\adminapi\middleware\AdminLogMiddleware::class
|
||||
]);
|
||||
|
||||
@ -90,41 +90,40 @@ class SystemRoleServices extends BaseServices
|
||||
/**
|
||||
* 后台验证权限
|
||||
* @param Request $request
|
||||
* @return bool|void
|
||||
* @throws \throwable
|
||||
*/
|
||||
public function verifiAuth(Request $request)
|
||||
public function verifyAuth(Request $request)
|
||||
{
|
||||
|
||||
// 获取当前的接口于接口类型
|
||||
$rule = trim(strtolower($request->rule()->getRule()));
|
||||
$method = trim(strtolower($request->method()));
|
||||
|
||||
// 判断接口是一下两种的时候放行
|
||||
if (in_array($rule, ['setting/admin/logout', 'menuslist'])) {
|
||||
return true;
|
||||
}
|
||||
|
||||
//权限菜单未添加时返回true
|
||||
// 获取所有接口类型以及对应的接口
|
||||
$allAuth = Cache::remember('all_auth', function () {
|
||||
/** @var SystemMenusServices $menusService */
|
||||
$menusService = app()->make(SystemMenusServices::class);
|
||||
return $menusService->getColumn([['api_url', '<>', ''], ['auth_type', '=', 2]], 'api_url,methods');
|
||||
$allList = $menusService->getColumn([['api_url', '<>', ''], ['auth_type', '=', 2]], 'api_url,methods');
|
||||
$allAuth = [];
|
||||
foreach ($allList as $item) {
|
||||
$allAuth[trim(strtolower($item['methods']))][] = trim(strtolower(str_replace(' ', '', $item['api_url'])));
|
||||
}
|
||||
return $allAuth;
|
||||
});
|
||||
if (!in_array($rule, array_map(function ($item) {
|
||||
return trim(strtolower(str_replace(' ', '', $item)));
|
||||
}, array_column($allAuth, 'api_url')))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
//菜单按钮能看到的情况下所有接口都能访问
|
||||
// 权限菜单未添加时放行
|
||||
if (!in_array($rule, $allAuth[$method])) return true;
|
||||
|
||||
// 获取管理员的接口权限列表,存在时放行
|
||||
$auth = $this->getRolesByAuth($request->adminInfo()['roles'], 2);
|
||||
//验证访问接口是否存在
|
||||
if (!in_array($rule, array_map(function ($item) {
|
||||
return trim(strtolower(str_replace(' ', '', $item)));
|
||||
}, array_column($auth, 'api_url')))) {
|
||||
if (in_array($rule, $auth[$method])) {
|
||||
return true;
|
||||
}
|
||||
//验证访问接口是否有权限
|
||||
if (empty(array_filter($auth, function ($item) use ($rule, $method) {
|
||||
if (trim(strtolower($item['api_url'])) === $rule && $method === trim(strtolower($item['methods'])))
|
||||
return true;
|
||||
}))) {
|
||||
} else {
|
||||
throw new AuthException(110000);
|
||||
}
|
||||
}
|
||||
@ -144,7 +143,12 @@ class SystemRoleServices extends BaseServices
|
||||
return Cache::remember($cacheName, function () use ($rules, $type) {
|
||||
/** @var SystemMenusServices $menusService */
|
||||
$menusService = app()->make(SystemMenusServices::class);
|
||||
return $menusService->getColumn([['id', 'IN', $this->getRoleIds($rules)], ['auth_type', '=', $type]], 'api_url,methods');
|
||||
$authList = $menusService->getColumn([['id', 'IN', $this->getRoleIds($rules)], ['auth_type', '=', $type]], 'api_url,methods');
|
||||
$rolesAuth = [];
|
||||
foreach ($authList as $item) {
|
||||
$rolesAuth[trim(strtolower($item['methods']))][] = trim(strtolower(str_replace(' ', '', $item['api_url'])));
|
||||
}
|
||||
return $rolesAuth;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -246,6 +246,10 @@ class LoginServices extends BaseServices
|
||||
* 重置密码
|
||||
* @param $account
|
||||
* @param $password
|
||||
* @return bool
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
*/
|
||||
public function reset($account, $password)
|
||||
{
|
||||
@ -263,15 +267,16 @@ class LoginServices extends BaseServices
|
||||
* 手机号登录
|
||||
* @param $phone
|
||||
* @param $spread
|
||||
* @param string $user_type
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
*/
|
||||
public function mobile($phone, $spread, $user_type = 'h5')
|
||||
public function mobile($phone, $spread, string $user_type = 'h5')
|
||||
{
|
||||
//数据库查询
|
||||
$user = $this->dao->getOne(['phone' => $phone, 'is_del' => 0]);
|
||||
$user = $this->dao->getOne(['account|phone' => $phone, 'is_del' => 0]);
|
||||
if (!$user) {
|
||||
$user = $this->register($phone, '123456', $spread, $user_type);
|
||||
if (!$user) {
|
||||
@ -297,6 +302,10 @@ class LoginServices extends BaseServices
|
||||
* 切换登录
|
||||
* @param $user
|
||||
* @param $from
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
*/
|
||||
public function switchAccount($user, $from)
|
||||
{
|
||||
@ -329,12 +338,14 @@ class LoginServices extends BaseServices
|
||||
|
||||
/**
|
||||
* 绑定手机号(静默还没写入用户信息)
|
||||
* @param $user
|
||||
* @param $phone
|
||||
* @param $step
|
||||
* @return mixed
|
||||
* @param string $key
|
||||
* @return array
|
||||
* @throws \Psr\SimpleCache\InvalidArgumentException
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
*/
|
||||
public function bindind_phone($phone, $key = '')
|
||||
public function bindind_phone($phone, string $key = '')
|
||||
{
|
||||
if (!$key) {
|
||||
throw new ApiException(410037);
|
||||
@ -361,10 +372,13 @@ class LoginServices extends BaseServices
|
||||
|
||||
/**
|
||||
* 用户绑定手机号
|
||||
* @param $user
|
||||
* @param int $uid
|
||||
* @param $phone
|
||||
* @param $step
|
||||
* @return mixed
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
*/
|
||||
public function userBindindPhone(int $uid, $phone, $step)
|
||||
{
|
||||
@ -393,10 +407,12 @@ class LoginServices extends BaseServices
|
||||
|
||||
/**
|
||||
* 用户绑定手机号
|
||||
* @param $user
|
||||
* @param int $uid
|
||||
* @param $phone
|
||||
* @param $step
|
||||
* @return mixed
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
*/
|
||||
public function updateBindindPhone(int $uid, $phone)
|
||||
{
|
||||
|
||||
@ -33040,7 +33040,7 @@ INSERT INTO `eb_system_menus` (`id`, `pid`, `icon`, `menu_name`, `module`, `cont
|
||||
(468, 125, '', '附加权限', 'admin', '', '', '', '', '[]', 0, 0, 0, 1, '/admin*', '', 1, '', 0, '', 0),
|
||||
(469, 468, '', '添加配置字段表单', 'admin', '', '', 'setting/config/create', 'GET', '[]', 0, 0, 0, 1, '', '', 2, '', 0, '', 0),
|
||||
(470, 468, '', '保存配置字段', 'admin', '', '', 'setting/config', 'POST', '[]', 0, 0, 0, 1, '', '', 2, '', 0, '', 0),
|
||||
(471, 468, '', '编辑配置字段表单', 'admin', '', '', 'setting/config/<id>/edit', '', '[]', 0, 0, 0, 1, '', '', 2, '', 0, '', 0),
|
||||
(471, 468, '', '编辑配置字段表单', 'admin', '', '', 'setting/config/<id>/edit', 'GET', '[]', 0, 0, 0, 1, '', '', 2, '', 0, '', 0),
|
||||
(472, 468, '', '编辑配置分类', 'admin', '', '', 'setting/config/<id>', 'PUT', '[]', 0, 0, 0, 1, '', '', 2, '', 0, '', 0),
|
||||
(473, 468, '', '删除配置', 'admin', '', '', 'setting/config/<id>', 'DELETE', '[]', 0, 0, 0, 1, '', '', 2, '', 0, '', 0),
|
||||
(474, 468, '', '修改配置状态', 'admin', '', '', 'setting/config/set_status/<id>/<status>', 'PUT', '[]', 0, 0, 0, 1, '', '', 2, '', 0, '', 0),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user