9 Star 60 Fork 18

小灰灰 / huicmf_webman

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

基于webman+mysql 开发的php后台权限管理系统

huicmf_webman

支持一键CURD

支持自定义域名绑定,可以隐藏后台地址

【新增】

博客插件,可以使用博客啦,默认博客前台访问地址:

http://127.0.0.1:8788/blog

项目地址:

【gitee】

https://gitee.com/xianrenqh/huicmf_webman

使用文档地址:

https://gitee.com/xianrenqh/huicmf_webman/wikis/pages


后台演示

http://webman1.xiaohuihui.club/admin

账号:admin

密码:admin888

运行环境~~!:

php: 8.0.2+

mysql: 5.5+

Redis

备注:

后台登录做了登录错误安全限制:

  1. N分钟内连续错误超过N次,限制此ip再次访问。(需要在后台设置里(或者数据库中)解除ip,然后清除缓存)
  2. N分钟内连续N次输入密码错误,此账号将禁止登录。(过去N分钟之后才能再次登录)
  3. 1和2中的N可以在环境变量.env中设置(默认均为10):
#允许登录失败几次
login_failure_times = 10

#登录失败超过N次则后,多久允许重写登录(分钟)
login_failure_min = 10

注意:如果自己把自己锁定了(一般测试时,自己把自己玩坏了),上面的1中,解决方案(2种):

  1. 更换ip访问后台并解封ip
  2. 如果没有ip,可以在数据库配置中删除对应的ip,然后redis缓存中找到对应的缓存,清除掉

安装:

1.首先clone代码到项目目录:

https://gitee.com/xianrenqh/huicmf_webman.git

2.在项目根目录执行:

composer update

3.启动服务

在命令行中执行:

# Windows
php windows.php

# Linux
php start.php 

4.安装并设置后台账户密码:

浏览器访问:

http://127.0.0.1:8788/install

进入数据库配置页面以及后台管理员账户密码设置

安装成功后会自动在根目录创建 .env 文件

4.默认端口端口

默认端口:8788

更改默认端口方法:

如果使用了.env文件,请在env文件中更改端口【APP_PORT】


如果没有使用.env文件:

请在\config\server.php 文件中更改:

'listen' => 'http://0.0.0.0:8788',

5.执行启动命令

(不知道命令的可以继续往下看)

6.愉快的访问后台吧:

http://127.0.0.1:8788/admin

用户名:admin

密码: 123456


7.配置伪静态(nginx转发[需要配置nginx反代]):

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;
    }
}

8.Nginx反向代理

官方案例:

upstream webman {
    server 127.0.0.1:8788;
    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:8788;
    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 ~_ 中的

一定要注意,如果没处理好这里, 可能会出现部分静态资源无法访问到情况

8.配置网站的运行目录为:public

9.绑定域名

(不绑定域名请使用 ip+端口访问)

10. 开启自定义域名访问

为何要配置自定义域名

HuiCmf-webman 默认的后台地址为 ip:端口+/admin ,可能存在普遍性和不安全性,为了防止对外暴露的风险,开发人员可进行自定义域名配置

配置提醒

  • 请在后台管理系统成功安装后再进行自定义域名配置
  • 配置自定义域名访问后,原有的 ip:端口/admin 方式,以及index前端方式将自动失效
  • 绑定域名开启后,所有的模块都需要绑定域名才能访问

如何配置自定义域名

进入 .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:8788; # 此端口对应 .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_set_header X-Forwarded-Proto $scheme;
      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)

11.可以愉快的使用绑定的域名访问啦啦啦

忘记后台密码

如果忘记密码,或者密码不对,请修改数据库表:cmf_admin

password: 4d934790841a4d8575c21e86b5b3eb71

salt: VkMJ27

对应的明文密码为:123456

启动方式(命令)

windows开发环境

php windows.php start

Linux生产环境

php start.php start
php start.php start -d

平滑重启

php start.php reload

更改redis配置

如需更改redis配置,需要更改以下2个地方:

(个人如果另行安装其他带有redis的插件的,需要另行更改其配置)

  1. 环境变量.env文件对应的redis配置
  2. webman-redis-queue配置: config/plugin/webman/redis-queue/redis.php

注意:

如果没有使用.env环境变量,则另需更改以下3个地方的配置

  1. \config\redis.php
  2. \config\session.php
  3. \config\thinkcache.php

.env环境

请复制或者重命名一份.example.env 为 .evn文件。并编辑里面的数据库配置 如果是使用命令行安装的,则无需复制并编辑数据

orm使用think的。 数据库链接配置文件在:

config\thinkorm.php

nginx代理

伪静态

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代理,这样有以下好处。

  • 静态资源由nginx处理,让webman专注业务逻辑处理
  • 让多个webman共用80、443端口,通过域名区分不同站点,实现单台服务器部署多个站点
  • 能够实现php-fpm与webman架构共存
  • nginx代理ssl实现https,更加简单高效
  • 能够严格过滤外网一些不合法请求
upstream webman {
    server 127.0.0.1:8788;
    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;
      }
  }
}

代码输出json数据

可以有以下2种方式:

方法1:

# 全局均可使用
return success_json();
return error_json();

方法2:

# 需要公公控制器先继承 \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配置文件中操作

需要配置:

  • no_login_controller
  • no_login_node
  • no_auth_controller
  • no_auth_node

huiCmf后台基本模块:

  1. 管理员管理
  2. 权限节点管理
  3. 角色组管理
  4. 后台菜单管理
  5. 定时任务管理
  6. 数据库管理
  7. 支持一键CURD

【权限节点管理】

使用的是控制器注解权限来增加(删除)权限节点

【定时任务管理】 定时插件默认关闭状态,如需启动,请在配置文件: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">&#xe67c;</i>选择图片
        </a>
    </div>
</div>

参数说明:

  1. 最顶部需要有class类名:huicmf-upload

  2. input回调框的代码中,hui_img_preview 里面的值和id值需要相同

  3. 点击按钮 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">&#xe67c;</i>选择图片</a>
        <div style="margin-top: 15px;">
            <small>(可拖拽图片调整显示顺序 )</small>
        </div>
        <!--回调显示选择的图片-->
        <div class="uploader-list am-cf" id="uploader-list" data-name="images[]" data-nums="3"></div>
    </div>
</div>

注意:由于增加了多选图的数量判断(限制),需要注意以下代码:


<div class="uploader-list am-cf" data-name="images[]" data-nums="0"></div>

其中:data-nums参数为多图的数量(如果是添加,默认为0,如果是编辑,请传递后台图片数量到此值)

data-name:提交表单的name属性名,可以为空,为空默认为:params[images][]

参数说明:

  1. 最顶部需要有class类名:huicmf-upload

  2. input回调框的代码中,hui_img_preview 里面的值和id值需要相同

  3. 点击按钮 a 标签 里面:

    打开选择框属性:data-open-pic="{:__url('index/file_list',['type'=>'more','select_id'=>'uploader-list'])}",其中:

    type=>'more' 意思是:单张图

    select_id' 意思是:需要传递回调数据的id

API接口开发

(如果不喜欢此接口开发,可以删掉api文件夹里的代码,自行开发自己的接口)

接口说明

接口的访问地址为:http://127.0.0.1:8788/api

请求方法: post

参数格式为:method 调用具体方法

其它参数:根据每个参数来定义。

需要登录的接口,可以用$this->userId获取当前访问用户id

$this->userId

**需要登录的接口的接口必须传递参数 token **

判断登录与否的标准就是是否在本地保存了token,如果保存了,就是登录状态,如果没有保存,就是未登录状态,需要登录的接口会自动带上token来进行请求数据。

api.php配置文件

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 即可。

接口调用案例(以UserController为例):

基本信息

  • 接口URL: https://你的域名/api
  • 请求方式: POST
  • Content-Type: multipart/form-data

请求参数:

接口请求参数见下表:

Body参数说明 (multipart/form-data)

参数名 示例值 是否必填 参数描述
method user.login 必填 接口方法
username admin 必填 登录名
password admin 必填 密码

响应示例

正确响应示例

{
  "code": 200,
  "data": "c9d2343fd754ca12a9be33e957574cce",
  "msg": ""
}

错误响应示例



{
  "code": 0,
  "msg": "没有找到此账号",
  "data": ""
}

webman

High performance HTTP Service Framework for PHP based on Workerman.

Manual【文档】

https://www.workerman.net/doc/webman

Benchmarks

https://www.techempower.com/benchmarks/#section=test&runid=9716e3cd-9e53-433c-b6c5-d2c48c9593c1&hw=ph&test=db&l=zg24n3-1r&a=2 image

LICENSE

MIT


特别感谢

以下项目排名不分先后

PhpStorm logo PhpStorm logo

版权信息

HuiCMF遵循Apache2.0开源协议发布,并允许商业使用。 本项目包含的第三方源码和二进制文件之版权信息另行标注。 版权所有Copyright © 2019-2022 by xiaohuihui (https://xiaohuihui.net.cn) All rights reserved。

免责声明1

HuiCMF遵循Apache2.0开源协议发布,并允许商业使用。任何用户在使用HuiCMF 后台框架前,请您仔细阅读并透彻理解本声明。您可以选择不使用HuiCMF后台框架,若您一旦使用HuiCMF 后台框架,您的使用行为即被视为对本声明全部内容的认可和接受。

仅供技术研究使用,请勿用于非法用途,否则产生的后果作者概不负责。

  • HuiCMF后台框架是一款开源免费的后台快速开发框架 ,主要用于更便捷地开发后台管理;其尊重并保护所有用户的个人隐私权,不窃取任何用户计算机中的信息。更不具备用户数据存储等网络传输功能。
  • 您承诺秉着合法、合理的原则使用HuiCMF后台框架,不利用HuiCMF 后台框架进行任何违法、侵害他人合法利益等恶意的行为,亦不将HuiCMF后台框架运用于任何违反我国法律法规的 Web 平台。
  • 任何单位或个人因下载使用HuiCMF后台框架而产生的任何意外、疏忽、合约毁坏、诽谤、版权或知识产权侵犯及其造成的损失 ( 包括但不限于直接、间接、附带或衍生的损失等),本开源项目不承担任何法律责任。
  • 用户明确并同意本声明条款列举的全部内容,对使用HuiCMF后台框架可能存在的风险和相关后果将完全由用户自行承担,本开源项目不承担任何法律责任。
  • 任何单位或个人在阅读本免责声明后,应在《MIT 开源许可证》所允许的范围内进行合法的发布、传播和使用HuiCMF 后台框架等行为,若违反本免责声明条款或违反法律法规所造成的法律责任(包括但不限于民事赔偿和刑事责任),由违约者自行承担。
  • 如果本声明的任何部分被认为无效或不可执行,其余部分仍具有完全效力。不可执行的部分声明,并不构成我们放弃执行该声明的权利。
  • 本开源项目有权随时对本声明条款及附件内容进行单方面的变更,并以消息推送、网页公告等方式予以公布,公布后立即自动生效,无需另行单独通知;若您在本声明内容公告变更后继续使用的,表示您已充分阅读、理解并接受修改后的声明内容。
MIT License Copyright (c) 2021 walkor<walkor@workerman.net> and contributors (see https://github.com/walkor/webman/contributors) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

Huicmf基于 webman开发的 后台权限管理系统 展开 收起
PHP 等 5 种语言
MIT
取消

发行版 (3)

全部

贡献者

全部

近期动态

加载更多
不能加载更多了
PHP
1
https://gitee.com/xianrenqh/huicmf_webman.git
git@gitee.com:xianrenqh/huicmf_webman.git
xianrenqh
huicmf_webman
huicmf_webman
v2.0

搜索帮助