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前端框架、单页异步局部加载设计,有效减少了js、css等静态资源重复加载。视图模板并非直接请求服务端模板文件,实际上仍是通过了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表示如果勾选了该项权限,则拥有了主视图和主左菜单数据的访问权限。
权限机制
每权限项的权限控制是由路径来控制的,具体控制逻辑见后台基础抽象类控制器。控制路径分为以下两种方式:
控制器名 + 方法名:常用方式
举例:
index/main后台的主界面权限项控制器名 + 方法名 + 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)
评论区