侧边栏壁纸
博主头像
云BLOG 博主等级

行动起来,活在当下

  • 累计撰写 318 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
SQL

VeiTool 后端 基础功能

Administrator
2024-03-04 / 0 评论 / 0 点赞 / 4 阅读 / 0 字

VeiTool 系统信息 基础功能

基础功能

插件管理

插件管理调用的是veitool官方的插件数据,可按类别、插件名称和是否免费来进行检索,用户可采用离线和在线两种方式进行插件安装。在线安装需登录veitool官方会员身份后方可安装 注册会员。 插件安装后用户可自由禁用和卸载插件。

设配置项

设配置项是可快速动态配置系统所需参数的管理模块,可按配置分组进行配置项的添加、编辑、删除等操作,配置项支持多种类型,如:单行文本、多行文本、复选、单选、日期、单图、多图等常用类型。在业务逻辑中可采用函数:vconfig('配置键名') 【插件配置获取:vconfig('@插件标识.配置键名') 】进行配置值获取。

管理配置

管理配置是对设定好的各配置项的值进行管理的模块,在该管理界面中,各配置项会按照所设配置类型(如:开关、单行文本、单图等)来自动呈现相应的样式,从而达到更直观、便捷的管理配置内容。

后台菜单

后台菜单是管理后台左栏菜单项(等同权限控制项)的功能模块,可动态控制添加、编辑、删除菜单项在左栏菜单的显示状况;菜单可无限级别添加,以及批量(每行为一项菜单)进行添加;可设置菜单(路由)标识、权限路径、外链路径、图标、排序和是否显示;可设置是否为菜单,如果设为非菜单则只在权限分配时的权限项中存在,而不会在菜单项中出现;可设定菜单的所属大分类(默认大分类“首页”)。

角色管理

角色管理是分配用户所属角色权限的功能模块,可添加、编辑、删除多个角色,每个角色具有独立的权限分配控制,添加或编辑角色时可在权限列表中直观地勾选对应的权限项,用户登录后只有被分配的角色权限项才会在左侧菜单显示并赋有管理权限(为便于开发:ID为1的超级管理员不受权限限制)。

用户管理

用户管理是管理系统管理员的功能模块,可添加、编辑、删除管理员。可设置管理员状态,正常表示可正常登录,否则禁止登录;可查看管理员最近登录IP和时间,以及可重置管理员登录密码(ID为1的超级管理员不可重置密码,登录后必须知道原登录密码在右上角用户下拉菜单中点击“修改密码”进行修改)。

数据维护

数据维护是对系统所连接数据库管理维护的功能模块。选择相应数据表,可对其进行数据备份、表修复、表优化等操作;可点击“恢复数据”查看备份备过的数据进行恢复或下载保存;可点击“查看字典”查看相应数据表的字段信息。

文件管理

文件管理是对用户上传过的资料(如:图片、文档、压缩包等)记录进行管理的功能模块。可按名称、上传时间、分组等条件进行检索查询;可软删、恢复以及清理(永久删除已被软删的资料)等操作。

地区管理

地区管理是设置地区信息的功能模块。可自由添加、编辑、删除地区名;可无限级别添加多级地区,级别关系清晰、直观明了。

短信记录

短信记录是对系统或手动所发短信记录管理的功能模块。可按手机号、内容、时间进行检索;系统默认对接了七牛短信API,可手动按短信模板进行验证码发送。

日志管理

日志管理是对用户登录记录和管理操作记录进行查看的功能模块。可按帐号、结果、时间以及登录位置进行检索;可清理30天前的日志记录。

在线用户

在线用户是查看当前登录管理员(或登录会员:如果扩充了会员模块的情况下)在线的信息列表。

架构设计

关于ThinkPHP6的请求流程请参照 HTTP请求流程

架构设计

系统采用多应用模式,默认有后台应用admin、接口应用api、前台应用index(空应用,预留用于扩展)三大应用。

每应用中的控制器均需继承基础abstract抽象类控制器:app/BaseController.php

后台应用admin下所有控制器均需继承后台基础abstract抽象类控制器:app/admin/controller/AdminBase.php,该基础抽象类控制器实现了后台管理员登录判断、权限控制以及日志记录和在线处理等功能。

模型统一放置于app/model目录下,每模型均需继承模型基类app/model/Base.php。系统基础模型均放置于app/model/system目录下。

后台控制器继承

namespace app\admin\controller;
use app\admin\controller\AdminBase;

class Index extends AdminBase
{
	public function index()
    {
		//业务逻辑
	}
	...
}

普通控制器继承

namespace app\index\controller;
use app\BaseController;

class Index extends BaseController
{
	public function index()
    {
		//业务逻辑
	}
	...
}

后台视图与数据

后台视图为基于Layui前端框架、单页异步局部加载设计,有效减少了jscss等静态资源重复加载。视图模板并非直接请求服务端模板文件,实际上仍是通过了ThinkPHP入口(有经过模板引擎)获得的。这样设计有两个目的:1. 为了服务端能灵活处理模板;2. 为了防止静态模板可直接被下载。

后台应用视图与数据的请求规范,为开发便捷,大部分采用同方法名中带参数$do进行区分获取(当然也可以采用api进行数据获取),这样设计有利于权限能同时控制视图与数据请求。

namespace app\admin\controller;

use app\admin\controller\AdminBase;
use app\model\User;

class Index extends AdminBase
{
    // 这里通过参数 $do 来进行区分获取 视图 和 json 数据
    public function index($do='')
    {
        if($do=='json'){ // 获取 json 数据
            return $this->returnMsg((new User())->listQuery());
        }
		// 调用视图
        $this->assign('limit', 10);
        return $this->fetch();

权限控制

系统为便于开发:ID为1的管理员帐号不受所设角色权限限制。

角色设计

系统权限控制源自于管理员所分配的角色,每个角色所配有的权限项均来自于后台菜单项,即每添加一项后台菜单便可设置对应的权限项。当某些权限项不一定为菜单项时,可设置该项不在后台菜单中显示。某角色所拥有的权限为该角色所保存的权限项(菜单项)ID串。

每菜单是可以通过英文状态下逗号“,”隔开来设置多个权限项,如:index/index,index/json 表示如果勾选了该项权限,则拥有了主视图和主左菜单数据的访问权限。

权限机制

每权限项的权限控制是由路径来控制的,具体控制逻辑见后台基础抽象类控制器。控制路径分为以下两种方式:

  1. 控制器名 + 方法名:常用方式

    举例:index/main 后台的主界面权限项

  2. 控制器名 + 方法名 + action:当同一方法中存在不同操作权限控制时使用传参action来进行区分控制

    举例:
    a.system.upload/upfile/image 后台上传图片的权限项,如果拥有该项权限,则表示可以访问控制方法admin/system.upload/upfile?action=image 即上传图片的权限;

    b.system.upload/upfile/video后台上传视频的权限项,如果拥有该项权限,则表示可以访问控制方法admin/system.upload/upfile?action=video 即上传视频的权限。

全局函数

系统全局函数文件位置:app/common.php

MD5判断

// @param   string   $w   字符
// @return  bool
is_md5($w)

字符正则判断

// @param   string   $s   目标字符串
// @param   string   $f   正则类型 ip,mobile,email 或者 允许有的位数范围,如:{1,3}
// @param   array    $t   合法的字符集0:字母数字汉字下划线 1:数字 2:小写字母 3:大写字母 4:汉字 5:任何非空白字符
// @param   string   $o   允许有字符
// @return  type
is_preg($s,$f='',$t=[0],$o='')

获取字符长度

// @param   string  $s  目标源
// @return  int
word_count($s)

生成随机字符

// @param   int      $l   指定长度
// @param   string   $c   源字符集
// @return  string
random($l,$c = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz')

生成密码

// @param   string   $p   密码
// @param   string   $s   密钥
// @return  string
set_password($p,$s)

设置订单号

// @retrun  string 
set_order_id()

字符串加星号

// @param   string    $s    字符串
// @param   string    $n    星号数 0:按字符算
// @return  string
half_replace($s,$n=0)

常规字符过滤

// @param   string    $s   目标字符
// @return  string
vtrim($s)

SQL字符过滤

// @param   string|array    $s    目标字符
// @param   int             $t    过滤类型 默认1 1转码 0解码
// @return  string|array
strip_sql($s,$t=1)

转ASCII码

// @param   array   $m   目标对象
// @return  string
strip_wd($m)

HTML过滤

// @param   string|array   $str    目标
// @param   int            $low    级别 默认1全过滤,0简单标签过滤
// @return  string|array
strip_html($str,$low = 1)

转换HTML实体

// @param   string   $s   目标字符
// @return  string
vhtmlspecialchars($s)

小数格式转换

// @param    float   $v   数值
// @param    int     $p   小数点后位数
// @param    bool    $s   是否格式化为字符串
// @return   float/string
dround($v, $p=2, $s=false)

获取扩展名

// @param   string   $f   文件路径串
// @return  string
file_ext($f)

删除文件夹

// @param  string  $dirname  目录
// @param  bool    $self     是否删除自身
// @return bool
rmdirs($dirname, $self = true)

复制文件夹

// @param  string  $source  源文件夹
// @param  string  $dest    目标文件夹
copydirs($source, $dest)

移除空目录

// @param   string   $dir  目录
// @return
remove_empty_folder($dir)

键串转换键值串

// @param   string   $ids   键串
// @param   array    $arr   数组
// @return  string
idstoname($ids,$arr)

获取站点配置

// @param  string  $name     配置键【支持:域1.域2,插件配置获取:@插件名.键名】
// @param  string  $default  缺省值
// @return array|string
vconfig($name='',$default='')

时间简易格式

// @param  int  $time  时间戳
// @return string
show_time($time)

配置项解析

// @param   string   $value   配置值
// @return  array|string
parse_attr($value = '')

获取所有子类ID

// @param  int     $pid    上级ID
// @param  array   $box    数据源
// @param  string  $ikey   ID键
// @param  string  $pkey   上级键
// @return string  ID串
get_subclass($pid,$box,$ikey='id',$pkey='pid')

小地区往上查询

// @param   int       $areaid    地区ID
// @param   string    $str       分隔符
// @param   int       $deep      查找深度
// @param   int       $start     查找开始
// @return  bool
area_pos($areaid, $str = ' » ', $deep = 0, $start = 0)

多级列表构造

// @param  array   $rs     所有菜单数组集
// @param  int     $pid    开始的父级ID
// @param  array   $key    3要素 ['id','parentid','title'] 顺序不能变
// @param  int     $t      填充符
// @param  int     $j      层级数
// @param  string  $s      缩进符
// @param  array   $ids    某id键的子类个数集
// @param  array   $arr    返回的父子重构顺序集 相对 $rs 多了 new_title 键
// @return array
list_tree($rs=[],$pid=0,$key=['id','parentid','title'],$t=1,$j=0,$s='',$ids=[],$arr=[])

常用方法

控制器内方法

所在文件位置:app\BaseController.php,继承该基类后的控制器内可调用:$this->方法名()

中断反馈信息

// @access  protected
// @param   string   $m   信息字符
// @param   int      $c   状态值 400前台关闭 401 Ajax请求未登陆 303网址请求未登录
// @param   array    $d   数组信息
// @param   array    $h   发送的Header信息
// @throws  HttpResponseException
exitMsg($m, $c = 0, $d = [], $h = [])

返回组信息(常用)

// 返回组信息
// @access  protected
// @param   string/array/obj    $msg      信息字符
// @param   int                 $code     状态码
// @param   array               $data     数组信息
// @param   int                 $scode    页头状态码
// @param   array               $header   头部
// @param   array               $options  参数
// @return  array/json
returnMsg($msg = '', $code = 0, $data = [], $scode = 200, $header = [], $options = [])

带模板反馈提示

// @access   protected
// @param    string    $msg    提示信息
// @param    int       $tpl    提示模板 默认 /404
// @param    string    $url    跳转的地址
returnTpl($msg = '', $tpl = '', $url = '')

多功能验证过滤

// @access protected
// @param  array         $name    变量名 /a转数组 /d整数 /f浮点 /b布尔 /s字符串 /u网址净化 /h全净化
// 去标签  /c转为HTML实体 /r转为2位小数 /*验证【默认允许:汉字|字母|数字|下划线|空格.#-】
// @param  mixed         $type    方法类型 默认 post
// @param  string|array  $filter  过滤方法 默认 strip_sql
// @param  bool          $bin     是否以传入数组为准 默认是
// @return array
only($name = [], $type = 'post', $filter = 'strip_sql', $bin = true)

0

评论区