1 Star 1 Fork 0

Georgie/laravel-module

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

组件介绍

此组件开源可商业。

通过使用模块来管理大型Laravel项目,模块就像一个laravel包非常方便的进行添加或移除。

这个包是在 nwidart.com/laravel-moduleslaravel-permission 组件基础上扩展了一些功能,所以需要先安装laravel-module,laravel-permission这两个组件。

laravel-modules 和 laravel-permission 组件的功能都可以正常使用

安装组件

laravel5 请使用:
composer require georgie/laravel-module 1.0

laravel8 请使用: 
composer require georgie/laravel-module 2.0

php artisan vendor:publish --provider="Nwidart\Modules\LaravelModulesServiceProvider"

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"

php artisan vendor:publish --provider="Georgie\Module\LaravelServiceProvider"

配置 composer.json 设置自动加载目录

{
  "autoload": {
    "psr-4": {
      "App\\": "app/",
      "Modules\\": "Modules/"
    }
  }
}

配置 Kernel.php

'api' => [
    \App\Http\Middleware\AcceptHeader::class,
],

创建模块

下面的命令是安装 Admin 模块

php artisan g:module Admin

创建模块会同时执行以下操作:

  • 生成 menus.php 配置文件
  • 生成 permission.php 权限文件

模块配置

新建模块时系统会自动创建配置,一般情况下不需要执行以下命令生成配置文件(除组件添加新配置功能外)

php artisan g:config Admin

文件说明

  • config——基础配置,用于配置模块中文描述等信息
  • permission.php——权限设置
  • menus.php——后台管理菜单

获取配置

下面是获取 Admin/config/config.php 文件中的name值,支持 . 从深度嵌套的数组中检索值。

\GModule::config('admin.config.name')

保存配置

function saveConfig(array $data = [], $name = 'config')
  • $data——配置数据
  • $name——配置文件

后台菜单

系统会根据模块配置文件 menus.php 生成后台菜单项

当 menus.php 文件不存在时,执行 php artisan g:config Admin 系统会为模块 Admin 创建菜单。

获取菜单

获取系统可使用的所有菜单,以集合形式返回数据。可用于后台显示菜单列表。

\GModule::getMenus()

权限管理

首先需要安装 laravel-permission 组件,安装方式在上面已经介绍。

创建权限配置

系统根据 Admin 模块配置文件 permission.php 重新生成权限,执行以下命令会创建权限配置文件。

php artisan g:permission Admin

不指定模块时生成所有模块的权限表

php artisan g:permission

文件存在时不会覆盖

生成的配置文件结构如下:

<?php return [
    [
        'group' => '文章管理',
        'permissions' => [
            ['title' => '添加栏目', 'name' => 'Modules\Admin\Http\Controllers\CategoryController@create', 'guard' => 'admin'],
        ],
    ],
];

name 指用于验证时的 权限标识 ,可以使用任何字符定义。如果以 控制器@方法 形式定义的,在使用中间件验证时会比较容易。

获取权限配置

根据 guard 获取权限数据,可用于后台配置设置表单。

\GModule::getPermissionByGuard('admin');

中间件

laravel-permission 组件提供了中间件功能,但处理不够灵活并对资源控制器支持不好。所以georgie/laravel-module 组件提供了中间件的功能扩展,你也可以使用 laravel-permission 中间件的所有功能。

以下都是对 georgie/laravel-module扩展中间件的说明,laravel-permission 中间件使用请查看组件手册。

使用中间件路由需要模块 permission.php 配置文件中的权限标识为 控制器@方法形式。

配置

app/Http/Kernel.php 文件的 $routeMiddleware 段添加中间件

protected $routeMiddleware = [
	...
	'permission'    => \Georgie\Module\Middlewares\PermissionMiddleware::class,
	...
];

站长特权

配置文件 config/georgie_module.php 文件中定义站长使用的角色。

'webmaster' => 'webmaster'

在使用中间件验证时,如果不前用户所在角色为站长角色,系统不进行验证直接放行。

普通路由

系统根据控制器方法检查是否存在权限规则,然后自动进行验证。

所以必须正确设置路由配置文件,下面是对编辑文章的权限设置

<?php
#config/permisson.php
return [
    [
        'group'       => '文章管理',
        'permissions' => [
            ['title' => '编辑管理', 'name' => 'Modules\Admin\Http\Controllers\ArticleController@edit', 'guard' => 'admin'],
        ],
    ],
];

下面是编辑文章的路由定义,必须保存 Modules\Admin\Http\Controllers\ArticleController@edit 规则已经在权限配置文件中定义,否则系统不验证。

Route::group([
    'middleware' => ['web', 'auth:admin'],'prefix'     => 'admin','namespace'  => 'Modules\Admin\Http\Controllers'], function () {
	Route::resource('edit_article', 'ArticleController@edit')->middleware("permission:admin");
});

上面的 permission 中间件的 admin 参数是权限 guard

资源路由

资源路由新增资源由 createstore方法完成,更新资源由 editupdate 方法完成。权限规则只需要设置 createedit 方法即可,在执行 store 动作时系统会自动使用 create 方法规则,update 动作会使用 create 方法规则,下面是用户管理的资源控制器规则设置:

<?php
#config/permisson.php
return [
    [
        'group'       => '会员管理',
        'permissions' => [
            ['title' => '会员管理', 'name' => 'Modules\Admin\Http\Controllers\UserController@index', 'guard' => 'admin'],
            ['title' => '添加会员', 'name' => 'Modules\Admin\Http\Controllers\UserController@create', 'guard' => 'admin'],
            ['title' => '编辑会员', 'name' => 'Modules\Admin\Http\Controllers\UserController@edit', 'guard' => 'admin'],
            ['title' => '删除会员', 'name' => 'Modules\Admin\Http\Controllers\UserController@destory', 'guard' => 'admin'],
            ['title' => '查看会员', 'name' => 'Modules\Admin\Http\Controllers\UserController@show', 'guard' => 'admin'],
        ],
    ],
];

资源路由中间件的使用

Route::resource('role', 'RoleController')->middleware("permission:admin,resource");

上面的 permission 中间件的 admin 参数是权限 guard,中间件 permission 的第二个参数 resource 表示这是一个资源路由验证。

模块方法

获取模块对象

#$module 模块标识
\GModule::module($module = null)

获取当前请求使用的模块名

\GModule::currentModule()

获取模块菜单,参数为模块标识,不传参数时获取当前模块菜单

\GModule::getMenuByModule('Admin')

验证权限如果用户是站长直接放行

\GModule::hadPermission()

获取模块列表,参数为不需要返回的模块,不传参数获取所有模块

\GModule::getModulesLists(['Admin','Article'])

获取模块路径

#$module——模块标识
\GModule::getModulePath($module = null);

自动化构建

大部分业务由 Controller控制器、Request请求难、Model模型、View视图、Handle处理器构成,很多时间这些工作都是重复的,系统支持通过一行命令生成业务需要的大部功能。

生成工作是根据模型和数据表完成的,所以必须先创建模型在数据库中创建模型表。

创建模型和迁移

执行以下命令系统会为 Article 模块创建 Category模型和对应的数据迁移文件。

php artisan g:model Category Article

执行自动化构建

首先安装组件

composer require georgie/laravel-autocreate

下面是根据 Article 模块的 Category 模型生成业务框架,系统同时会创建模型表单处理器,请查看 https://github.com/houdunwang/laravel-autocreate 学习。

php artisan g:autocreate Modules/Article/Entities/Category.php 文章

执行以下命令会创建下列文件

  1. 创建控制器 Http/Controllers/CategoryController
  2. 表单验证请求 Http/Request/CategoryRequest
  3. 添加路由规则 routes.php
  4. 生成模版视图

必须保存模型与数据表存在,某个文件存在时忽略这个文件继续向下执行

License

The Laravel framework is open-sourced software licensed under the MIT license.

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

通过使用模块来管理大型Laravel项目,模块就相当于一个laravel子项目一样非常方便的进行添加或移除。 展开 收起
Apache-2.0
取消

发行版 (2)

全部

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/georgie233/laravel-module.git
git@gitee.com:georgie233/laravel-module.git
georgie233
laravel-module
laravel-module
main

搜索帮助

Cb406eda 1850385 E526c682 1850385