帮酷LOGO
  • 显示原文与译文双语对照的内容
Laravel Ban simplify blocking and banning Eloquent models.

  • 源代码名称:laravel-ban
  • 源代码网址:http://www.github.com/cybercog/laravel-ban
  • laravel-ban源代码文档
  • laravel-ban源代码下载
  • Git URL:
    git://www.github.com/cybercog/laravel-ban.git
  • Git Clone代码到本地:
    git clone http://www.github.com/cybercog/laravel-ban
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/cybercog/laravel-ban
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • Laravel 禁止

    cog-laravel-ban

    ReleasesBuild StatusStyleCICode QualityLicense

    简介

    Laravel 禁止简化模型的强制性禁止管理。 在几分钟内制作任何型号的bannable !

    用例不限于用户模型,任何有说服力的模型都可以被禁止: 组织,团队,组和其他人。

    电子邮件内容

    特性

    • 模型可以有许多禁止。
    • 删除禁止在历史记录中保留为软删除记录。
    • 逻辑的大部分是由 BanService 处理的。
    • 具有阻止禁止用户路由访问的中间件。
    • 用例不限于 User 模型,任何有说服力的模型都可以被禁止。
    • banunban 模型触发事件。
    • 设计用于 Laravel Eloquent的模型。
    • 使用合同保持高自定义能力。
    • 利用特性从盒子中获得功能。
    • 遵循PHP标准建议:
    • 包含单元测试。

    安装

    首先,通过Composer获取软件包:

    $ composer require cybercog/laravel-ban
    寄存器包

    包将自动自动 register 。 这里步骤仅适用于 Laravel 5.4或者更早版本。

    app/config/app.php 中包括服务提供程序:

    'providers'=> [CogLaravelBanProvidersBanServiceProvider::class,],
    应用数据库迁移

    最后,你需要发布并运行数据库迁移:

    $ php artisan vendor:publish --provider="CogLaravelBanProvidersBanServiceProvider" --tag="migrations"$ php artisan migrate

    用法

    准备bannable模型

    useCogContractsBanBannableasBannableContract;useCogLaravelBanTraitsBannable;useIlluminateFoundationAuthUserasAuthenticatable;classUserextendsAuthenticatableimplementsBannableContract{useBannable;}

    准备bannable模型数据库表

    Bannable模型必须具有名为 banned_atnullable timestamp 列。 这里值用作标志,如果用户被禁止,则简化检查。 如果试图将默认 Laravel 用户模型设为 bannable,可以使用下面的示例。

    创建新的迁移文件
    $ php artisan make:migration add_banned_at_column_to_users_table

    然后将以下代码插入到迁移 file:

    <?phpuseIlluminateDatabaseMigrationsMigration;useIlluminateDatabaseSchemaBlueprint;useIlluminateSupportFacadesSchema;classAddBannedAtColumnToUsersTableextendsMigration{publicfunctionup() {Schema::table('users', function (Blueprint$table) {$table->timestamp('banned_at')->nullable(); }); }publicfunctiondown() {Schema::table('users', function (Blueprint$table) {$table->dropColumn('banned_at'); }); }}

    可用方法

    对实体应用禁止
    $user->ban();
    对具有原因注释的实体应用禁止
    $user->ban(['comment'=>'Enjoy your ban!',]);
    对将在一段时间内删除的实体应用
    $user->ban(['expired_at'=>'2086-03-28 00:00:00',]);

    expired_at 属性可以是 CarbonCarbon 实例或者任何可以通过 CarbonCarbon::parse($string) 方法解析的字符串:

    $user->ban(['expired_at'=>'+1 month',]);
    从实体中删除禁止
    $user->unban();

    unban 上,所有相关的禁止模型都是软删除。

    检查实体是否被禁止
    $user->isBanned();
    检查实体是否被禁止
    $user->isNotBanned();
    手动删除过期的禁止
    app(CogContractsBanBanService::class)->deleteExpiredBans();

    作用域

    获取所有未被禁止的模型
    $users=User::withoutBanned()->get();
    被禁止,并且没有被禁止的模型
    $users=User::withBanned()->get();
    只能得到被禁止的模型
    $users=User::onlyBanned()->get();
    作用域自动应用

    在查询作用域中应用查询作用域在bannable模型中定义 shouldApplyBannedAtScope 方法。 如果方法返回 true,则默认情况下将隐藏所有禁止的模型。

    useCogContractsBanBannableasBannableContract;useCogLaravelBanTraitsBannable;useIlluminateFoundationAuthUserasAuthenticatable;classUserextendsAuthenticatableimplementsBannableContract{useBannable;/** * Determine if BannedAtScope should be applied by default. * * @return bool*/publicfunctionshouldApplyBannedAtScope() {returntrue; }}

    事件

    如果实体被禁止,则触发 CogLaravelBanEventsModelWasBanned 事件。

    实体是否为 unbanned CogLaravelBanEventsModelWasUnbanned 事件被激发。

    中间件

    这个包有路由中间件,旨在阻止被禁止的用户进入 protected 路由。

    使用它在 app/Http/Kernel.php file:的$routeMiddleware array 中定义新中间件

    protected$routeMiddleware= ['forbid-banned-user'=>CogLaravelBanHttpMiddlewareForbidBannedUser::class,]

    然后在需要保护的任何路由和路由组中使用它:

    Route::get('/', ['uses'=>'UsersController@profile','middleware'=>'forbid-banned-user',]);

    计划

    完成基本安装之后,你可以开始使用 ban:delete-expired 命令了。 在大多数情况下,你都需要调度这些命令,因这里每次需要删除过期的和模型。

    可以在 Laravel 内核的控制台中调度该命令,就像任何其他命令一样。

    // app/Console/Kernel.phpprotectedfunctionschedule(Schedule$schedule){$schedule->command('ban:delete-expired')->everyMinute();}

    当然,上面代码中使用的时间只是示例。 调整它以适合你自己的偏好。

    变更日志

    有关最近发生更改的更多信息,请参见变更日志

    插件升级

    请参见升级插件以获得详细升级说明。

    请参见为细节提供帮助。

    测试

    运行以下测试:

    $ vendor/bin/phpunit

    安全性

    如果发现任何相关的安全问题,请电子邮件 open@cybercog.su,而不是使用问题跟踪程序。

    贡献者

    @a-komarev
    。Komarev

    Laravel 禁止参与者列表

    你可以随意添加更多的alternative请求。

    许可证

    关于 CyberCog

    CyberCog 是爱好者的社交统一。 研究产品&软件开发的最佳解决方案是我们的激情。

    CyberCog




    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语