Server : nginx/1.20.1 System : Linux iZ2ze9ojcl78uluczwag69Z 4.18.0-240.22.1.el8_3.x86_64 #1 SMP Thu Apr 8 19:01:30 UTC 2021 x86_64 User : www ( 1000) PHP Version : 7.3.28 Disable Function : passthru,exec,system,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv Directory : /www/wwwroot/0531yanglao.com/app/admin/validate/ |
<?php /* * @Description : 菜单验证器 * @Author : https://github.com/skyselang * @Date : 2020-05-05 * @LastEditTime : 2021-03-20 */ namespace app\admin\validate; use think\Validate; use think\facade\Db; use app\admin\service\AdminMenuService; class AdminMenuValidate extends Validate { // 验证规则 protected $rule = [ 'admin_menu_id' => ['require', 'checkAdminMenuId'], 'menu_name' => ['require', 'checkAdminMenu'], 'image_file' => ['require', 'file', 'image', 'fileExt' => 'jpg,png', 'fileSize' => '2097152'], ]; // 错误信息 protected $message = [ 'admin_menu_id.require' => '缺少参数:菜单id', 'menu_name.require' => '请输入菜单名称', 'image_file.require' => '请选择图片', 'image_file.file' => '请选择图片文件', 'image_file.image' => '请选择图片格式文件', 'image_file.fileExt' => '请选择jpg、png格式图片', 'image_file.fileSize' => '请选择大小小于2Mb的图片', ]; // 验证场景 protected $scene = [ 'menu_id' => ['admin_menu_id'], 'menu_add' => ['menu_name'], 'menu_edit' => ['admin_menu_id', 'menu_name'], 'menu_dele' => ['admin_menu_id'], 'menu_role_remove' => ['admin_menu_id'], 'menu_image' => ['image_file'], ]; // 验证场景定义:删除 protected function scenemenu_dele() { return $this->only(['admin_menu_id']) ->append('admin_menu_id', 'checkAdminMenuRole'); } // 验证场景定义:角色解除 protected function scenemenu_role_remove() { return $this->only(['admin_menu_id']) ->append('admin_menu_id', 'checkAdminMenuRoleRemove'); } // 自定义验证规则:菜单是否存在 protected function checkAdminMenuId($value, $rule, $data = []) { $admin_menu_id = $value; $admin_menu = AdminMenuService::info($admin_menu_id); if ($admin_menu['is_delete'] == 1) { return '菜单已被删除:' . $admin_menu_id; } return true; } // 自定义验证规则:菜单是否已存在 protected function checkAdminMenu($value, $rule, $data = []) { $admin_menu_id = isset($data['admin_menu_id']) ? $data['admin_menu_id'] : ''; if ($admin_menu_id) { if ($data['menu_pid'] == $data['admin_menu_id']) { return '菜单父级不能等于菜单本身'; } } $menu_name = Db::name('admin_menu') ->field('admin_menu_id') ->where('admin_menu_id', '<>', $admin_menu_id) ->where('menu_pid', '=', $data['menu_pid']) ->where('menu_name', '=', $data['menu_name']) ->where('is_delete', '=', 0) ->find(); if ($menu_name) { return '菜单名称已存在:' . $data['menu_name']; } /*$menu_url = Db::name('admin_menu') ->field('admin_menu_id') ->where('admin_menu_id', '<>', $admin_menu_id) ->where('menu_url', '=', $data['menu_url']) ->where('menu_url', '<>', '') ->where('is_delete', '=', 0) ->find(); if ($menu_url) { return '菜单链接已存在:' . $data['menu_url']; }*/ return true; } // 自定义验证规则:菜单是否有子菜单或分配有角色或分配有管理员 protected function checkAdminMenuRole($value, $rule, $data = []) { $admin_menu_id = $value; $admin_menu = Db::name('admin_menu') ->field('admin_menu_id') ->where('menu_pid', '=', $admin_menu_id) ->where('is_delete', '=', 0) ->find(); if ($admin_menu) { return '请删除所有子菜单后再删除'; } $where0 = [['admin_menu_ids', 'like', $admin_menu_id], ['is_delete', '=', 0]]; $where1 = [['admin_menu_ids', 'like', $admin_menu_id . ',%'], ['is_delete', '=', 0]]; $where2 = [['admin_menu_ids', 'like', '%,' . $admin_menu_id . ',%'], ['is_delete', '=', 0]]; $where3 = [['admin_menu_ids', 'like', '%,' . $admin_menu_id], ['is_delete', '=', 0]]; $whereOr = [$where0, $where1, $where2, $where3]; $admin_role = Db::name('admin_role') ->field('admin_role_id') ->whereOr($whereOr) ->find(); if ($admin_role) { return '请在[角色]中解除所有角色后再删除'; } $where0 = [['admin_menu_ids', 'like', $admin_menu_id], ['is_delete', '=', 0]]; $where1 = [['admin_menu_ids', 'like', $admin_menu_id . ',%'], ['is_delete', '=', 0]]; $where2 = [['admin_menu_ids', 'like', '%,' . $admin_menu_id . ',%'], ['is_delete', '=', 0]]; $where3 = [['admin_menu_ids', 'like', '%,' . $admin_menu_id], ['is_delete', '=', 0]]; $whereOr = [$where0, $where1, $where2, $where3]; $admin_user = Db::name('admin_user') ->field('admin_user_id') ->whereOr($whereOr) ->find(); if ($admin_user) { return '请在[管理员]中解除所有管理员后再删除'; } return true; } }