同步操作将从 小灰灰/huicmf_webman 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
支持一键CURD
支持自定义域名绑定,可以隐藏后台地址
【新增】
博客插件,可以使用博客啦,默认博客前台访问地址:
https://gitee.com/xianrenqh/huicmf_webman
https://gitee.com/xianrenqh/huicmf_webman/wikis/pages
http://webman.xiaohuihui.club/admin
账号:admin
密码:admin888
php: 8.0.2+
mysql: 5.5+
Redis
#允许登录失败几次
login_failure_times = 10
#登录失败超过N次则后,多久允许重写登录(分钟)
login_failure_min = 10
注意:如果自己把自己锁定了(一般测试时,自己把自己玩坏了),上面的1中,解决方案(2种):
- 更换ip访问后台并解封ip
- 如果没有ip,可以在数据库配置中删除对应的ip,然后redis缓存中找到对应的缓存,清除掉
https://gitee.com/xianrenqh/huicmf_webman.git
composer update
在命令行中执行:
# Windows
php windows.php
# Linux
php start.php
浏览器访问:
进入数据库配置页面以及后台管理员账户密码设置
安装成功后会自动在根目录创建 .env 文件
默认端口:8787
更改默认端口方法:
如果使用了.env文件,请在env文件中更改端口【APP_PORT】
如果没有使用.env文件:
请在\config\server.php 文件中更改:
'listen' => 'http://0.0.0.0:8787',
(不知道命令的可以继续往下看)
用户名:admin
密码: 123456
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Connection "";
if (!-f $request_filename){
proxy_pass http://webman;
}
}
官方案例:
upstream webman {
server 127.0.0.1:8787;
keepalive 10240;
}
server {
server_name 站点域名;
listen 80;
access_log off;
root /your/webman/public;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Connection "";
if (!-f $request_filename){
proxy_pass http://webman;
}
}
}
自己整理案例:
upstream webman {
server 127.0.0.1:8787;
keepalive 10240;
}
server
{
listen 80;
listen [::]:80;
server_name webman.xiaohuihui.net;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/webman.xiaohuihui.net/public;
access_log off;
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;
#SSL-END
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
#error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END
#PHP-INFO-START PHP引用配置,可以注释或修改
include enable-php-74.conf;
#PHP-INFO-END
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/webman.xiaohuihui.net.conf;
#REWRITE-END
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
# 这里是重点
proxy_pass http://webman;
error_log /dev/null;
access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
expires 12h;
# 这里是重点
proxy_pass http://webman;
error_log /dev/null;
access_log /dev/null;
}
}
以上代码中,
_location ~_ 中的
一定要注意,如果没处理好这里, 可能会出现部分静态资源无法访问到情况
(不绑定域名请使用 ip+端口访问)
HuiCmf-webman 默认的后台地址为 ip:端口+/admin ,可能存在普遍性和不安全性,为了防止对外暴露的风险,开发人员可进行自定义域名配置
进入 .env 文件中,修改 ADMIN_DOMAIN_STATUS
参数值为 true、
修改 ADMIN_DOMAIN
参数值为你要配置的域名,例如 admin18Ue7.xxx.com
如果需要前台模块,以及api模块,请修改:
INDEX_DOMAIN
API_DOMAIN
如果框架还存在项目首页或者其他应用页面,请自行把每个应用对应的域名也配置上。 需要在 config/plugin/webman/domain/app.php 中配置
domain/app.php参考配置案例:
<?php
use support\lib\Env;
return [
//是否开启插件
'enable' => Env::get('HUICMF.ADMIN_DOMAIN_STATUS', false),
// 多应用绑定关系
'bind' => [
//例如:'网站默认地址,例如 www.baidu.com' => '',
'127.0.0.1' => '', // 不属于任何应用
Env::get('HUICMF.INDEX_DOMAIN') => 'index', // 绑定到index应用
Env::get('HUICMF.ADMIN_DOMAIN') => 'admin', // 绑定到admin应用
Env::get('HUICMF.API_DOMAIN') => 'api', // 绑定到api应用
],
// 绑定关系,域名,应用的验证逻辑,返回true时认为符合绑定关系,反之不符合返回404
'check' => function ($bind, $domain, $app) {
return isset($bind[$domain]) && $bind[$domain] === $app;
}
];
然后在 Nginx 中配置域名的反向代理 [根据实际项目自行修改]
# 如果需要SSL请自行配置证书即可
# admin18Ue7 这个参数可以自定义
upstream admin18Ue7 {
server 127.0.0.1:8787; # 此端口对应 .env 中的 APP_PORT
keepalive 10240;
}
server {
listen 80;
server_name admin18Ue7.xxx.com; # 此地址对应 .env 中的 EASYADMIN.ADMIN_DOMAIN
access_log off;
root /部署的项目地址/huicmf-webman/public;
}
对应的伪静态调整为:
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Connection "";
if (!-f $request_filename){
# 主要增加了这里
rewrite ^/(.*)$ /$1 break;
proxy_pass http://admin18Ue7;
}
}
最后,你的后台访问地址为:
admin18Ue7.xxx.com/admin
ip更换为域名访问,其他不变(仍然需要包含后面的 /admin)
如果忘记密码,或者密码不对,请修改数据库表:cmf_admin
password: 4d934790841a4d8575c21e86b5b3eb71
salt: VkMJ27
对应的明文密码为:123456
php windows.php start
php start.php start
php start.php start -d
php start.php reload
如需更改redis配置,需要更改以下2个地方:
(个人如果另行安装其他带有redis的插件的,需要另行更改其配置)
注意:
如果没有使用.env环境变量,则另需更改以下3个地方的配置
- \config\redis.php
- \config\session.php
- \config\thinkcache.php
请复制或者重命名一份.example.env 为 .evn文件。并编辑里面的数据库配置 如果是使用命令行安装的,则无需复制并编辑数据
config\thinkorm.php
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Connection "";
if (!-f $request_filename){
proxy_pass http://webman;
}
}
当webman需要直接提供外网访问时,建议在webman前增加一个nginx代理,这样有以下好处。
upstream webman {
server 127.0.0.1:8787;
keepalive 10240;
}
server {
server_name 站点域名;
listen 80;
root /your/webman/public;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
if (!-f $request_filename){
proxy_pass http://webman;
}
}
}
可以有以下2种方式:
# 全局均可使用
return success_json();
return error_json();
# 需要公公控制器先继承 \app\BaseController;
# 然后引入 public function __construct()
# 默认后台模块(admin)已继承,可直接使用。其他模块需要自行继承
return $this->success();
return $this->error();
error输出,可以在msg位置输出数组:['code'=>204,'msg'=>'error'],此时输出的json code值为对应的204
仅针对后台admin模块权限
插件plugin里鉴权请使用方法一,不支持方法二
鉴权和不鉴权有2中操作方法,任意一种都行
在控制器代码中操作:
控制器默认为鉴权状态
如果控制器不需要鉴权,请使用以下方法:
控制器添加一个 $noNeedAuthController
属性 (默认值:false,【鉴权】)
例如:
<?php
namespace plugin\huiblog\app\controller;
class IndexController
{
/**
* 控制器不需要鉴权
* @var bool
*/
public $noNeedAuthController = true;
}
如果控制器中部分方法不需要鉴权,请使用以下方法:
控制器添加一个 $noNeedAuthAction
属性 (数组,默认值:空数组)
例如:
<?php
namespace plugin\huiblog\app\controller;
class IndexController
{
/**
* 不需要鉴权的方法
* @var string[]
*/
public $noNeedAuthAction = ['index','login'];
}
在config/huicmf.php配置文件中操作
需要配置:
【权限节点管理】
使用的是控制器注解权限来增加(删除)权限节点
【定时任务管理】 定时插件默认关闭状态,如需启动,请在配置文件:config/plugin/xianrenqh/task/app.php 修改enable=true
定时任务,使用的是后台自带的定时任务,类似宝塔定时任务管理功能
案例页面:【后台-上传测试页】
案例代码,请参考 app/admin/view/upload_test.html 文件
<div class="layui-form-item huicmf-upload">
<label class="layui-form-label">头像</label>
<div class="layui-input-inline" style="width: 50%">
<input type="text" name="avatar" value=""
onmouseover="hui_img_preview('avatar-select-input',this.value)"
onmouseout="layer.closeAll();" id="avatar-select-input" autocomplete="off"
class="layui-input">
</div>
<div class="layui-input-inline" style="width: 120px">
<a class="layui-btn"
data-open-pic="{:__url('index/file_list',['type'=>'one','select_id'=>'avatar-select-input'])}">
<i class="layui-icon"></i>选择图片
</a>
</div>
</div>
最顶部需要有class类名:huicmf-upload
input回调框的代码中,hui_img_preview 里面的值和id值需要相同
点击按钮 a 标签 里面:
打开选择框属性:data-open-pic="{:__url('index/file_list',['type'=>'one','select_id'=>'avatar-select-input'])}",其中:
type=>'one' 意思是:单张图
select_id' 意思是:需要传递回调数据表单的id字段
<div class="layui-form-item huicmf-upload">
<label class="layui-form-label">多图选择</label>
<div class="layui-input-block" style="margin-top: 15px;">
<a class="layui-btn"
data-open-pic="{:__url('index/file_list',['type'=>'more','select_id'=>'uploader-list'])}"><i
class="layui-icon"></i>选择图片</a>
<div style="margin-top: 15px;">
<small>(可拖拽图片调整显示顺序 )</small>
</div>
<!--回调显示选择的图片-->
<div class="uploader-list am-cf" id="uploader-list" data-nums="3"></div>
</div>
</div>
注意:由于增加了多选图的数量判断(限制),需要注意以下代码:
<div class="uploader-list am-cf" data-nums="0"></div>
其中:data-nums参数为多图的数量(如果是添加,默认为0,如果是编辑,请传递后台图片数量到此值)
最顶部需要有class类名:huicmf-upload
input回调框的代码中,hui_img_preview 里面的值和id值需要相同
点击按钮 a 标签 里面:
打开选择框属性:data-open-pic="{:__url('index/file_list',['type'=>'more','select_id'=>'uploader-list'])}",其中:
type=>'more' 意思是:单张图
select_id' 意思是:需要传递回调数据的id
(如果不喜欢此接口开发,可以删掉api文件夹里的代码,自行开发自己的接口)
接口的访问地址为:http://127.0.0.1:8787/api
请求方法: post
参数格式为:method 调用具体方法
其它参数:根据每个参数来定义。
需要登录的接口,可以用$this->userId获取当前访问用户id
$this->userId
**需要登录的接口的接口必须传递参数 token **
判断登录与否的标准就是是否在本地保存了token,如果保存了,就是登录状态,如果没有保存,就是未登录状态,需要登录的接口会自动带上token来进行请求数据。
config/api.php
新增接口均需要在此文件中增加接口配置
新增接口时,需要先在api模块中增加一个接口控制器,所有接口控制器均要继承\app\api\controller\ApiController 控制器,如:
控制器名称需要使用完整名称,需要带上"Controller",如:TestController
例如:
namespace app\api\controller;
class TestController extends ApiController{
public function list(){}
}
然后在接口配置文件 config\api.php 中定义下新增的接口
'test'=>[
'code' => 'Test',
'method' => [
'getlist' => [
'code' => 'list',
'is_login' => false
]
]
]
最外面的test是url地址调用的第一个参数 code对应的是接口控制器类名 method里面定义的是参数 getlist是外部访问的方法名,getlist里面code是Test控制器里面的具体方法名 is_login 含义为是否需要登录,当is_login 为true时,必须传token。可使用$this->userId 获取当前登录用户
如果是一个公共数据接口,直接在 app\api\controller\CommonController.php 文件中写方法,任意请求方式访问:
http://你的域名/api.html/common/test 即可。
基本信息
https://你的域名/api
POST
multipart/form-data
请求参数:
接口请求参数见下表:
Body参数说明 (multipart/form-data)
参数名 | 示例值 | 是否必填 | 参数描述 |
---|---|---|---|
method | user.login | 必填 | 接口方法 |
username | admin | 必填 | 登录名 |
password | admin | 必填 | 密码 |
响应示例
正确响应示例
{
"code": 200,
"data": "c9d2343fd754ca12a9be33e957574cce",
"msg": ""
}
错误响应示例
{
"code": 0,
"msg": "没有找到此账号",
"data": ""
}
High performance HTTP Service Framework for PHP based on Workerman.
https://www.workerman.net/doc/webman
MIT
以下项目排名不分先后
HuiCMF遵循Apache2.0开源协议发布,并允许商业使用。 本项目包含的第三方源码和二进制文件之版权信息另行标注。 版权所有Copyright © 2019-2022 by xiaohuihui (https://xiaohuihui.net.cn) All rights reserved。
HuiCMF遵循Apache2.0开源协议发布,并允许商业使用。任何用户在使用
HuiCMF
后台框架前,请您仔细阅读并透彻理解本声明。您可以选择不使用HuiCMF
后台框架,若您一旦使用HuiCMF
后台框架,您的使用行为即被视为对本声明全部内容的认可和接受。仅供技术研究使用,请勿用于非法用途,否则产生的后果作者概不负责。
HuiCMF
后台框架是一款开源免费的后台快速开发框架 ,主要用于更便捷地开发后台管理;其尊重并保护所有用户的个人隐私权,不窃取任何用户计算机中的信息。更不具备用户数据存储等网络传输功能。HuiCMF
后台框架,不利用HuiCMF
后台框架进行任何违法、侵害他人合法利益等恶意的行为,亦不将HuiCMF
后台框架运用于任何违反我国法律法规的 Web 平台。HuiCMF
后台框架而产生的任何意外、疏忽、合约毁坏、诽谤、版权或知识产权侵犯及其造成的损失 (
包括但不限于直接、间接、附带或衍生的损失等),本开源项目不承担任何法律责任。HuiCMF
后台框架可能存在的风险和相关后果将完全由用户自行承担,本开源项目不承担任何法律责任。HuiCMF
后台框架等行为,若违反本免责声明条款或违反法律法规所造成的法律责任(包括但不限于民事赔偿和刑事责任),由违约者自行承担。此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。