afrittella / back-project

基于 Laravel 的另一个管理面板。受 Backpack 启发。

1.3.7 2017-06-15 13:29 UTC

This package is not auto-updated.

Last update: 2024-09-27 08:26:15 UTC


README

Latest Stable Version Total Downloads Scrutinizer Code Quality StyleCI Build Status License

警告。此存储库未积极维护。可能不兼容 Laravel 的最新版本。

Back Project 1.3.7

Back Project 是一个基于 Laravel 5.4+ 的管理面板,基于 AdminLTE 和其他出色的包。有关详细信息,请参阅 致谢

请参阅 CHANGELOG.md 以获取详细的更新信息。

功能

  • AdminLTE 模板
  • 易于使用的面板、按钮、链接、图标等 Html 组件和助手
  • 基于 spatie/laravel-permission 的简单授权管理
  • 菜单管理
  • 媒体管理器:您可以作为后端用户上传媒体,也可以作为管理员管理其他用户上传的所有媒体(请参阅 媒体管理器
  • 社交登录

安装

composer require afrittella/back-project

将服务提供者添加到您的 config.app 服务提供者列表中

Afrittella\BackProject\BackProjectServiceProvider::class,

发布配置、资产、视图、迁移

配置

php artisan vendor:publish --provider="Afrittella\BackProject\BackProjectServiceProvider" --tag="config"

php artisan vendor:publish --provider="Prologue\Alerts\AlertsServiceProvider"

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

php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravel5"

在 config/laravel-permission.php 中更改模型类为

'permission' => Afrittella\BackProject\Models\Permission::class,
'role' => Afrittella\BackProject\Models\Role::class,

社交登录默认禁用。要使用它,您必须遵循以下步骤

  • 更改 config/back-project.php 中的以下行

    'social_login_enabled' => [
      'facebook' => true, // enable facebook login
      'twitter' => true, // enable twitter login
      'linkedin' => true // enable linkedin login
    ],
  • 创建 FacebookTwitterLinkedin 应用程序。

  • 一旦获得应用程序密钥,请将它们添加到 .env 和 config/services.php 中,如下所示。

    .env

    FACEBOOK_ID = XXXXXXXX
    FACEBOOK_SECRET = XXXXX
    FACEBOOK_REDIRECT = http://example.com/auth/facebook/callback
    
    TWITTER_ID = XXXXXXXX
    TWITTER_SECRET = XXXXX
    TWITTER_REDIRECT = http://example.com/auth/twitter/callback
    
    LINKEDIN_ID = XXXXXXXX
    LINKEDIN_SECRET = XXXXX
    LINKEDIN_REDIRECT = http://example.com/auth/linkedin/callback
    

    config/service.php

    ...
    'facebook' => [
        'client_id' => env('FACEBOOK_ID'),
        'client_secret' => env('FACEBOOK_SECRET'),
        'redirect' => env('FACEBOOK_REDIRECT'),
    ],
    
    'twitter' => [
        'client_id' => env('TWITTER_ID'),
        'client_secret' => env('TWITTER_SECRET'),
        'redirect' => env('TWITTER_REDIRECT'),
    ],
    
    'linkedin' => [
        'client_id' => env('LINKEDIN_ID'),
        'client_secret' => env('LINKEDIN_SECRET'),
        'redirect' => env('LINKEDIN_REDIRECT'),
    ]

语言

目前只支持意大利语和英语。

运行

php artisan vendor:publish --provider="Afrittella\BackProject\BackProjectServiceProvider" --tag="lang"

请注意:如果您不想更改默认字符串,则不需要发布翻译文件。

默认 Laravel 语言由 caousecs/laravel-lang 包提供。您必须手动根据项目将要使用的语言复制翻译文件。

将 vendor/caouecs/laravel-lang/src/[language-folder] 的内容复制到 resources/lang/[language-folder]

BackProject、AdminLTE、头像资产和视图

php artisan vendor:publish --provider="Afrittella\BackProject\BackProjectServiceProvider" --tag="adminlte"

php artisan vendor:publish --provider="Laravolt\Avatar\ServiceProvider"

php artisan vendor:publish --provider="Afrittella\BackProject\BackProjectServiceProvider" --tag="public"

php artisan vendor:publish --provider="Afrittella\BackProject\BackProjectServiceProvider" --tag="errors"

如果您想编辑它们,可以发布 Back Project 默认视图

php artisan vendor:publish --provider="Afrittella\BackProject\BackProjectServiceProvider" --tag="views"

迁移

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

运行

php artisan migrate

php artisan back-project:seed-permissions

php artisan back-project:seed-menus

配置

队列

可以使用队列发送注册邮件。

设置队列

  • 更改 .env 文件。设置 QUEUE_DRIVER=database
  • 更改 config/back-project.php 行:"use_queue" => true,
  • 运行 php artisan queue:table 以创建作业表
  • 运行 php artisan queue:failed-table
  • 如 Laravel 文档中所述配置队列工作者 Laravel documentation

默认情况下,Back Project 使用经典的通知系统。

授权

BackProject 提供了 3 个自定义中间件,其中一个替换了“RedirectIfAuthenticated”。如果您想使用此中间件(它将认证的用户重定向到 admin/dashboard),则应将 app/Http/Middleware/Kernel.php 中的 “guest” 别名替换为 Back Project 的自定义一个,并按以下方式添加其他两个

'guest' => \Afrittella\BackProject\Http\Middleware\RedirectIfAuthenticated::class,
'admin' => \Afrittella\BackProject\Http\Middleware\Admin::class,
'role' => \Afrittella\BackProject\Http\Middleware\Role::class,

用户模型

该软件包提供了一个默认的用户模型。它具备所有使后置投影正常工作的功能。如果您想使用自己的自定义模型,只需扩展

Afrittella\BackProject\Models\Auth\User;

如果您正在使用软件包模型,或者您的用户模型不在默认文件夹中,您必须修改config/auth.php

...
'providers' => [
  'users' => [
      'driver' => 'eloquent',
      'model' => Afrittella\BackProject\Models\Auth\User::class,
  ],
  ...

如果您想使用自己的自定义用户模型,请记住在config/back-project.php中更改user_model键。

后置项目简单认证方法

后置项目有一个简单的授权方法,位于Afrittella/BackProject/Http/Controllers/Controller.php

public function bCAuthorize($ability, $record = [])
{
     if ($record->user_id !== Auth::user()->id) {
         abort(403);
     }
}

如果您只想简单地检查用户是否有权管理记录,可以使用这个控制器代替Laravel默认控制器,并在执行任何数据库操作之前调用“bCAuthorize”。

异常

后置项目有一个默认的异常处理器,用于渲染自定义错误视图。要使用此处理器,请将以下行添加到Exceptions/Handler.php

...
use Afrittella\BackProject\Exceptions\BackProjectHandler;
use Afrittella\BackProject\Exceptions\BaseException;

class Handler extends ExceptionHandler
{
    ...

    public function render($request, Exception $exception)
    {
        ...

        if ($exception instanceof BaseException) {
            if ($response = BackProjectHandler::getResponse($exception)) {
                return $response;
            }
        }

        ...

        return parent::render($request, $exception);
    }
}

开始吧

完成安装配置部分后,前往您项目的URL(www.example.com/register),注册并激活第一个用户,他将成为网站管理员。

媒体管理器

后置项目使用intervention/image和intervention/imagecache来管理图像上传、调整大小和显示。上传后,可以使用imagecache软件包以及默认或自定义过滤器显示图像。请随意为您自己的图像创建自定义过滤器。

按照以下示例更改config/imagecache.php

return array(

    /*
    |--------------------------------------------------------------------------
    | Name of route
    |--------------------------------------------------------------------------
    |
    | Enter the routes name to enable dynamic imagecache manipulation.
    | This handle will define the first part of the URI:
    |
    | {route}/{template}/{filename}
    |
    | Examples: "images", "img/cache"
    |
    */

    'route' => [FIRST PART OF THE URI YOU WANT FOR DISPLAYING IMAGES],

    /*
    |--------------------------------------------------------------------------
    | Storage paths
    |--------------------------------------------------------------------------
    |
    | The following paths will be searched for the image filename, submited
    | by URI.
    |
    | Define as many directories as you like.
    |
    */

    'paths' => array(
	// Insert here your uploads directory
        public_path('upload'),
        public_path('images')        
    ),

    /*
        |--------------------------------------------------------------------------
        | Manipulation templates
        |--------------------------------------------------------------------------
        |
        | Here you may specify your own manipulation filter templates.
        | The keys of this array will define which templates
        | are available in the URI:
        |
        | {route}/{template}/{filename}
        |
        | The values of this array will define which filter class
        | will be applied, by its fully qualified name.
        |
        */

        'templates' => array(
            'small' => 'Intervention\Image\Templates\Small',
            'medium' => 'Intervention\Image\Templates\Medium',
            'large' => 'Intervention\Image\Templates\Large',
        ),

        /*
        |--------------------------------------------------------------------------
        | Image Cache Lifetime
        |--------------------------------------------------------------------------
        |
        | Lifetime in minutes of the images handled by the imagecache route.
        |
        */

        'lifetime' => 43200,

    );

阅读Intervention/Image 文档了解如何使用它。

您可以在模型上使用HasOneAttachmentHasManyAttachment特质来将其关联到attachments表。

示例

...
use Afrittella\BackProject\Traits\HasOneAttachment;
...

class Model
{
    use HasOneAttachment;

    ...
}

您可以在config/filesystems.php中更改文件上传的文件夹。

待办事项

  • 完整文档在wiki上。
  • 更多测试。
  • 更好的资产(js/css)管理。
  • 更好的翻译管理。

致谢

我受到了Laravel背包项目的启发,但我尝试制作了一个更简单的版本,只包含我为我的项目所需的功能。如果您想合作并改进它,请随意打开PR或发送反馈。

后置项目依赖于以下软件包

许可证

此软件包在MIT许可证下授权。