{"id":18859307,"url":"https://github.com/emacle/vue-php-admin","last_synced_at":"2025-07-24T00:03:38.586Z","repository":{"id":102490904,"uuid":"532171065","full_name":"emacle/vue-php-admin","owner":"emacle","description":"RBAC通用角色权限管理系统, 前后端分离架构, 基于 vue-element-admin 和 PHP CodeIgniter RESTful 实现","archived":false,"fork":false,"pushed_at":"2025-01-13T13:29:57.000Z","size":4763,"stargazers_count":16,"open_issues_count":1,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-14T12:14:14.502Z","etag":null,"topics":["codeigniter","element-ui","jwt","medoo","php","php-jwt","rbac","restful","vue"],"latest_commit_sha":null,"homepage":"https://vue.774433.xyz/","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emacle.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-09-03T05:58:57.000Z","updated_at":"2025-04-09T10:22:29.000Z","dependencies_parsed_at":null,"dependency_job_id":"afd5a630-a391-4d61-9c65-b8a369f972f4","html_url":"https://github.com/emacle/vue-php-admin","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/emacle/vue-php-admin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacle%2Fvue-php-admin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacle%2Fvue-php-admin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacle%2Fvue-php-admin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacle%2Fvue-php-admin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emacle","download_url":"https://codeload.github.com/emacle/vue-php-admin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacle%2Fvue-php-admin/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266770006,"owners_count":23981486,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["codeigniter","element-ui","jwt","medoo","php","php-jwt","rbac","restful","vue"],"created_at":"2024-11-08T04:17:14.344Z","updated_at":"2025-07-24T00:03:38.547Z","avatar_url":"https://github.com/emacle.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [VUE-PHP-ADMIN-DEMO](https://vue.774433.xyz)\n\n# vue-php-admin 项目说明\n\n通用后台角色权限管理系统, 基于 [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin/) 和 [PHP CodeIgniter 3.1.10 RESTful](https://github.com/chriskacerguis/codeigniter-restserver) 实现，\n采用前后端分离架构的权限管理系统，PHP快速开发平台，目标是搭建一套简洁易用的快速解决方案，可以帮助用户有效降低项目开发难度和成本。\n\n以vue-element-admin@4.4.0 前端模板为基础， **修改动态路由部分，实现菜单路由可根据后端角色进行动态加载.** 后端路由权限基于 `php-jwt` 使用 `php CI hook` 做token及权限认证\n\n将vue-element-admin前端原来样例模板除首页、文档外，其余样例模板归档集中在 `样例模板` 菜单下，见 @router/index.js constantRouterMap，其余组件如 tags-views等，全部未做变化，可根据需要具体需求进行删减。 \n\n动态切换角色实现见 [vue-php-admin-V3](https://github.com/emacle/vue-php-admin-V3.git)\n\n## 主要功能\n- [x] 1. 系统登录：系统用户登录，`jwt token方式`, `github/gitee 三方登录`\n- [x] 2. 用户管理：新建用户，修改用户，删除用户，查询用户\n- [x] 3. 角色管理：新建角色，修改角色，删除角色，查询角色\n- [x] 4. 菜单管理：新建菜单，修改菜单，删除菜单，查询菜单\n- [x] 5. 部门管理：新建部门，修改部门，删除部门，查询部门\n- [x] 6. 图标管理：vue-element-admin 原有封装组件\n- [x] 7. **jwt生成访问与刷新token， access_token过期后，根据refreshtoken刷新访问token，实现无缝刷新功能。refreshtoken 加入计数器,在有效期内接口调用超过一定次数自动续期, CI模式使用hooks做控制器方法调用前的token及权限认证功能** \n- [x] 8. 图形验证码（`gregwar/captcha` 包生成）, 企业微信扫码登录, 见 [vue-php-admin-V3](https://github.com/emacle/vue-php-admin-V3.git)\n- [X] 9. **以 restful 风格重新构建代码 20200401 ,GET/POST/PUT/DELETE**\n- [ ] 10. 界面主题优化\n- [ ] 11. **完全弃用 CI 自带数据库操作，使用 catfan/medoo 进行数据库操作**\n- [X] 12. 系统日志： [PHP CodeIgniter 3.1.10 RESTful](https://github.com/chriskacerguis/codeigniter-restserver) 后端生成 `logs` 表\n\n## RESTful 规范\n - restful规范增删改查完整示例 见 [Article.php 控制器](https://github.com/emacle/vue-php-admin/blob/master/CodeIgniter-3.1.10/application/controllers/api/v2/Article.php)\n - 引入了 catfan/medoo 包数据库操作，替换CI框架的部分model， TODO: 使用medoo 完全替换CI的数据库的操作\n - 使用 catfan/medoo 实现 **复杂分页过滤排序** 见 [article_get()](https://github.com/emacle/vue-php-admin/blob/master/CodeIgniter-3.1.10/application/controllers/api/v2/Article.php) 及 [users_get()](https://github.com/emacle/vue-php-admin/blob/master/CodeIgniter-3.1.10/application/controllers/api/v2/sys/User.php#L176) 与 [vue前端 GET 请求构造参数](https://github.com/emacle/vue-php-admin/blob/master/vue-element-admin/src/views/sys/user/index.vue#L321)\n    \n    前端GET请求参数与使用的 table 组件有关 这里使用 [vue-data-tables](https://www.njleonzhang.com/vue-data-tables/#/) 组件\n\n    ```\n    GET /articles?offset=1\u0026limit=30\u0026sort=-id\u0026fields=id,title,author\u0026query=~author,title\u0026author=888\u0026title=world\n\n    limit:  每页记录数，后台会配置默认值\n    offset: 第几页，后台会配置默认值\n    sort:   支持多个参数 \u0026sort=-id,+author =\u003e id降序 author 升序\n    fileds: 指定要获取的显示字段 =\u003e 降低网络流量\n    query:  支持多个参数 \u0026query=~author,title =\u003e author like 模糊查询， title精确查询 \u0026author=888\u0026title=world 需要配合query参数才有意义\n    ```\n\n## 使用说明\n\n### 前端\n1. 下载前端代码(vue-element-admin目录)解压\n2. 修改接口配置\n\n    cat .env.development\n    ```html\n      # base api\n      VUE_APP_BASE_API = 'http://www.cirest.com:8890/api/v2/'\n    ```\n3. 运行\n    ```html\n       npm run dev\n    ```\n\n### 后端\n1. 下载PHP后端代码(CodeIgniter-3.1.10目录)解压\n2. 创建数据库 vueadmin, 导入 **vueadmin.sql** 文件，navcat-for-mysql导入有时会出错时, 修改 mysql my.ini配置文件参数 mysqld 节点下添加 max_allowed_packet = 500M\n\n3. 后端数据库连接配置 修改配置文件\n\n    cat application\\config\\database.php\n    \n    ```php\n     $db['default'] = array(\n        'dsn'\t=\u003e '',\n        'hostname' =\u003e 'localhost',\n        'username' =\u003e 'root',\n        'password' =\u003e 'root',\n        'database' =\u003e 'vueadminv2',\n        ...\n    ```\n    cat application\\config\\config.php\n    ```php\n    // medoodb 初始化数据库全局配置, 注意与CI databases.php 区别, TODO： 完全弃用 CI 自带数据库操作，使用medoodb\n    $config['medoodb'] = [\n        'database_type' =\u003e 'mysql',\n        'database_name' =\u003e 'vueadminv2',\n        'server' =\u003e 'localhost',\n        'username' =\u003e 'root',\n        'password' =\u003e 'root',\n        'charset' =\u003e 'utf8',\n        //可选：端口\n        'port' =\u003e 3306,\n        //可选：表前缀\n        'prefix' =\u003e '',\n        // PDO驱动选项 http://www.php.net/manual/en/pdo.setattribute.php\n        'option' =\u003e [\n            PDO::ATTR_CASE =\u003e PDO::CASE_NATURAL\n        ]\n    ];\n    ```\n4. CodeIgniter-3.1.10目录， composer 安装相关依赖包 php-jwt 与 codeigniter-restserver\n    ```php\n    composer install  // 根据composer.json 初始安装所有插件包\n\n    ```\n    或者手动\n     ```php\n    composer require chriskacerguis/codeigniter-restserver\n    composer require firebase/php-jwt\n    composer require league/oauth2-github\n    composer require nette/http\n    composer require catfan/medoo\n    ```\n    \n5. 使用 phpstudy 配置站点域名管理, 同时修改hosts文件（可选）\n\n    www.cirest.com:8890  **注意与前端接口配置一致** BASE_API: '\"http://www.cirest.com:8890/api/v2/\"'\n\n    api接口调用使用示例：\n    ```html    \n    http://www.cirest.com:8890/api/v2/sys/user/testapi # 免token认证测试接口正常  对应 GET 请求\n    http://www.cirest.com:8890/index.php/api/v2/sys/user/testapi\n    ```\n\n    免token认证测试接口在 CodeIgniter-3.1.10/config/config.php 配置\n\n    ```php\n    $config['jwt_white_list'] = [\n        '/example/users/get',\n        '/example/users/post',\n        '/example/users/delete',\n        '/article/articles/get', // 测试api接口不认证 http://www.cirest.com:8890/api/v2/article/articles     uri_string =\u003e api/v2/article/articles\n        '/article/articles/post',\n        '/article/articles/put',\n        '/article/articles/delete',\n        '/sys/user/testapi/get',\n    ]\n    ```\n\n    后端php 接口uri带有 index.php 若要去掉 修改根目录下 `CodeIgniter-3.1.10/.htaccess` 文件(Apache), 注意不是 `CodeIgniter-3.1.10/application/` 目录下\n\n    `cat CodeIgniter-3.1.10/.htaccess`\n    \n    ```html\n      \u003cIfModule mod_rewrite.c\u003e\n        RewriteEngine on\n        RewriteCond %{REQUEST_FILENAME} !-d\n        RewriteCond %{REQUEST_FILENAME} !-f\n        RewriteRule ^(.*)$ /index.php?/$1 [QSA,PT,L]\n      \u003c/IfModule\u003e\n    ```\n    Nginx的话需要修改nginx对应的配置\n\n## 角色权限说明\n1. 这里将权限抽象成三种权限（可扩展更多），菜单类权限（包括控件按钮），角色类权限（用户可分配的角色），部门数据类权限（用户可查看的部门数据），参考 [角色权限组+资源分配](https://blog.csdn.net/qiuziqiqi/article/details/65437123)\n2. 前端添加菜单，角色，部门的时候，后端生成对应的权限，写入 `sys_perm` 表，系统的超级管理员角色自动拥有了所有权限（也可根据具体业务需要进行设计）\n3. 用户-\u003e角色-\u003e权限\n4. 数据权限： 实际开发中，需要设置用户只能查看哪些部门的数据，这种情况一般称为数据权限。数据权限需要在对应的业务类型表里加入部门数据字段来进行sql条件限制\n   在（系统管理-角色管理）设置需要数据权限的角色, 添加了角色授权范围 \n   全部数据权限/部门数据权限/部门及以下数据权限/仅本人数据权限/自定数据权限\n   业务代码逻辑可先根据授权范围，来处理来判断角色拥有的部门数据权限，全部数据权限则sql语句不做限制，\n   部门数据及以下数据权限，及本人数据需要对sql语句做限制，自定义数据权限，则sql语句加入自定义的部门限制条件即可\n\n ![角色权限](vue-element-admin/static/screenshot/role_perm.png)\n\n## 数据库表说明\n\n| Tables_in_vueadminv2 | 说明                                      |\n|---------------------:|----------------------------------------- |\n| keys                 | PHP CI RESTful apikey可config.php开启关闭  |\n| logs                 | PHP CI RESTful 日志表可config.php开启关闭   |\n| sys_dept             | 系统部门表                                 |\n| sys_menu             | 系统菜单表                                 |\n| sys_perm             | 系统权限表                                 |\n| sys_perm_type        | 权限类型（暂时未用到）                       |\n| sys_role             | 系统角色表                                 |\n| sys_role_perm        | 角色权限关系表                              |\n| sys_user             | 系统用户表                                 |\n| sys_user_dept        | 用户所属部门表（可一对多）                    |\n| sys_user_role        | 用户角色对应关系                            |\n| sys_user_token       | 使用JWT token此表无用                       |\n| upload_tbl           | 业务测试表                                  |\n\n## 开发环境/编辑器\n- phpstudy_pro `php 7.3.4nts` + `Apache 2.4.39`\n- vue.js\n- vscode\n\n## 前端目录树\n ![前端目录树](vue-element-admin/static/screenshot/vuetree.png)\n## 多级菜单配置\n ![多级菜单](vue-element-admin/static/screenshot/menuq.png)\n\n## jwt无缝刷新测试配置\n\nCodeIgniter-3.1.10\\application\\config\\config.php   // `access_token/refresh_token` 过期时间配置\n\n```\n$config['jwt_access_token_exp'] = 15; // 单位秒\n$config['jwt_refresh_token_exp'] = 180; // 单位秒\n```\n\n## jwt无缝刷新效果\n ![删除](vue-element-admin/static/screenshot/del_jwt.gif)\n ![编辑](vue-element-admin/static/screenshot/edit_jwt.gif)\n ![查看](vue-element-admin/static/screenshot/view_jwt.gif)\n\n## github 三方认证demo.gif\n ![github_login.gif](vue-element-admin/static/screenshot/github_login.gif)\n\n## 截图\n \n ![菜单](vue-element-admin/static/screenshot/menu.png)\n ![菜单新增](vue-element-admin/static/screenshot/menu_add.png)\n ![菜单查询](vue-element-admin/static/screenshot/menu_search.png) \n ![角色/授权](vue-element-admin/static/screenshot/role.png)\n ![角色新增](vue-element-admin/static/screenshot/role2.png)\n ![用户管理](vue-element-admin/static/screenshot/user.png)\n ![用户新增](vue-element-admin/static/screenshot/user_add.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femacle%2Fvue-php-admin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femacle%2Fvue-php-admin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femacle%2Fvue-php-admin/lists"}