Laravel Moderation 实现内容审核的例子

1、简介
Laravel Moderation 是一个基于 Laravel 5.* 实现的简单内容审核系统,使用该扩展可以允许或拒绝对应用资源的请求,比如文章、评论、用户等,以便通过屏蔽攻击性、干扰性或侮辱性的内容来保持应用的纯净。简单来说,就是通过一个审核状态来判断资源是否通过审核,然后把这个功能集成到 Laravel Moderation 扩展包。大致的操作流程如下:

首先,用户创建资源(文章、评论或其他Eloquent模型)
创建后该资源处于待审核或不可见状态(例如通过Post::all()只返回审核通过的文章)
后台管理员决定是否通过或拒绝这个资源
在管理员的审核下保持应用的纯净
2、安装
通过Composer安装:

composer require hootlex/laravel-moderation
在config/app.php中注册服务提供者:

'providers' => [
    ...
    Hootlex\Moderation\ModerationServiceProvider::class,
    ...
];
最后发布扩展配置文件到config目录:

php artisan vendor:publish --provider="Hootlex\Moderation\ModerationServiceProvider" --tag=config
3、模型设置
要开启模型审核,可以在模型类中使用 Hootlex\Moderation\Moderatable trait 并添加status、 moderated_by 和 moderated_at字段到模型对应数据表。

use Hootlex\Moderation\Moderatable;
class Post extends Model
{
    use Moderatable;
    ...
}
创建数据库迁移文件:

class AddModeratioColumnsToPostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('posts', function (Blueprint $table) {
            $table->smallInteger('status')->default(0);
            $table->dateTime('moderated_at')->nullable();
            //如果你想跟踪谁审核了这个模型,添加一个'moderated_by'字段
            //$table->integer('moderated_by')->nullable()->unsigned();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('posts', function(Blueprint $table)
        {
            $table->dropColumn('status');
            $table->dropColumn('moderated_at');
            //$table->integer('moderated_by')->nullable()->unsigned();
        });
    }
}
运行迁移命令添加对应字段到数据表posts:

php artisan migrate
4、使用案例
注:这里我们以Post模型为例进行演示,以此类推,你可以对任何模型进行审核。
审核模型

通过id对模型进行审核(通过、不通过):

Post::approve($post->id);
Post::reject($post->id);
或者通过查询构建器:

Post::where('title', 'Horse')->approve();
Post::where('title', 'Horse')->reject();
查询模型

默认情况下只返回审核通过的模型:

//返回所有审核通过的模型
Post::all();

//返回标题为Horse的审核通过的模型
Post::where('title', 'Horse')->get();
查询待审核或审核不通过的模型:

//返回待审核posts
Post::pending()->get();

//返回审核不通过posts
Post::rejected()->get();

//返回审核通过和待审核posts
Post::withPending()->get();

//返回审核通过和不通过的posts
Post::withRejected()->get();
查询所有模型:

//返回所有posts
Post::withAnyStatus()->get();

//返回所有title为Horse的模型
Post::withAnyStatus()->where('title', 'Horse')->get();
模型状态

有三个辅助函数帮助我们检查模型状态:

//检查模型是否是待审核
$post->isPending();

//检查模型是否审核通过
$post->isApproved();

//检查模型是否审核不通过
$post->isRejected();
严格审核

严格审核意味着只有审核通过对资源才能查询出来。要返回其他状态的模型必须修改配置禁用严格审核,下面我们就来看看如何配置。

5、配置
全局配置

通过编辑 config/moderation.php 文件对全局进行配置,在该文件中你可以配置以下选项:

status_column 表示数据表中默认状态字段 status
moderated_at_column 表示数据表中默认字段 moderated_at
moderated_by_column 表示数据表中默认字段 moderated_by
strict 表示严格审核
模型配置

在模型中你可以定义一些变量来覆盖全局配置

比如要覆盖 status 字段,可以这么做:

const MODERATION_STATUS = 'moderation_status';
要覆盖 moderated_at 字段:

const MODERATED_AT = 'mod_at';
要覆盖 moderated_by 字段:

const MODERATED_BY = 'mod_by';
要启用或者禁用严格审核:

public static $strictModeration = true;

时间: 2024-09-19 22:35:11

Laravel Moderation 实现内容审核的例子的相关文章

图像识别技术在内容审核领域的应用研究

互联网内容发展与图像识别技术 早在2013年,全世界每天会上传超过5亿张图片.上传20万小时长的视频到互联网.但是人们每天在Instagram分享近6000万张照片,在Facebook分享近3亿张--当然,还没算上Snapchat. Google . Twitter等大量产图的应用.据估计,一年后就可达到18亿,所以在三年后的今天,这个数值必然远超乎我们的想象.确实,人们相比过去,互联网的数据每年都在爆炸式增长.IBM 的研究称,整个人类文明所获得的全部数据中, 有 90%是过去两年内产生的,等

《魔兽世界》获文化部批文,表明已通过文化部的内容审核

7月21日消息,根据文化部网站公开的信息显示,<魔兽世界>今日获得了文化部的批文,这表明魔兽世界已经通过了文化部的内容审核.不过,魔兽真正开服,仍然需要通过新闻出版总署的许可. 根据文化部的游戏产品内容审查系统显示,由上海网之易网络科技发展有限公司运营的魔兽世界已经今天获得了由文化部办法的批文,备案文号为文网进字[2009]006号.这表示魔兽世界游戏内容已经没有问题. 不过,魔兽世界真正开服还需要等待新闻出版总署的许可.日前,新闻出版总署就进口网络游戏审批管理事宜发布了<关于加强对进口

微信吸取微博教训 加大公众账号内容审核

硅谷网讯 昨日,在腾讯"把脉"沙龙上,微信平台第一次对外交流.微信产品总监曾鸣明确表态:微信不是营销工具.并特别针对微信公众平台指出,视公众账号为 营销渠道的做法行不通. 七成公众账号为企业账号 微信于去年8月推出公众平台,个人和机构都可建立公众账号,与用户全方位沟通和互动. 曾鸣昨日表示,目前,很多企业在微信平台上盲目追求用户数,把平台当成宣传渠道,对用户进行信息轰炸,就像过度开垦一样,只能产生短期效益. 微信公众平台目前有3万认证公众账号,企业账号占比超70%.由于公众平台提供每天

网络剧在节目播出前应组织审核人员进行内容审核

记者 轩召强 晚报讯 为引导和规范网络剧.微电影等网络视听节目健康发展,国家广电总局和国家互联网信息办昨日联合下发<关于进一步加强网络剧.微电影等网络视听节目管理的通知>(以下简称 <通知>).广电总局新闻发言人昨日表示,互联网视听节目服务单位要切实履行开办主体职责,承担大众传媒的社会责任,对播出的网络剧.微电影等网络视听节目负责.在节目播出前,应组织审核人员进行内容审核,审核通过后方可上网播出. 近年来,网络剧.微电影等网络视听节目作为一种新兴网络文化业态发展迅速,但是,其中部分

laravel框架缓存使用配置与例子

基础介绍 假设您的应用程序显示了十个最流行的歌曲提供给用户投票评选. 你真的需要在用户每次访问时否访问这十首歌曲吗?如果你可以存储10分钟的歌曲, 甚至一个小时以便大大加快您的应用程序, 该怎么办?使用 laravel缓存会变得非常简单. laravel提供五个缓存的驱动模式: •文件系统 •数据库 •Memcached •APC •Redis •内存 (Arrays) 默认情况下, Laravel被配置为使用文件系统缓存驱动, 这是不需要配置的. 文件系统驱动把缓存项作为文件存储在storag

Java读取文件内容的小例子

Java 提供 BufferedReader 类用来从流中读取字符串.FileReader 类用来读取文件.我们用这两个类来读取文件中的字符串. 下面是一个例子: import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;public class ReadFile{ public static void main(String[] args){ String path="c:/1.txt&

Laravel 5.2 数据库查询的例子

1.简介 数据库查询构建器提供了一个方便的.平滑的接口来创建和运行数据库查询.查询构建器可以用于执行应用中大部分数据库操作,并且能够在支持的所有数据库系统上工作. 注意:Laravel 查询构建器使用 PDO 参数绑定来避免 SQL 注入攻击,不再需要过滤传递到绑定的字符串. 2.获取结果集 从一张表中取出所有行 在查询之前,使用DB门面的table方法,table方法为给定表返回一个查询构建器,允许你在查询上链接更多约束条件并最终返回查询结果.在本例中,我们使用get方法获取表中所有记录: <

网盘内容审核有哪几种方式?

上周,有关部门接到群众举报百度网盘部分账号存在淫秽色情问题,经调查这一情况确实属实,因此北京文化市场执法总队对百度下达整改通知. 值得一提的是,自从今年4月份有关部门开展扫黄打非.净网2014以及剑网行动之后,已经有不少产品受到影响或关闭.其中,最为大家熟悉的莫不过是快播,新浪爱问·共享资料也在5月5日主动关闭进行排查,时至今日仍未恢复,而360网盘也在活动之后宣布,为配合有关部门的净网行动,他们将对个人文件的分享内容进行人工审核-- 看到这里问题就来了,人工审核无疑太累,而且不能上传后立马分享

Laravel 创建自定义 Facades 类的例子

使用Laravel框架必不可少的会用到它很多强大的门面类(Facades),门面提供了一个"静态"接口到服务容器中绑定的类,官方文档阐述了如何使用系统自带的缓存门面,我们这里演示如何创建并使用一个自定义的门面类. 注:本教程基于上一节服务提供者做部分代码修改,不熟悉的请参阅. 我们首先创建一个需要绑定到服务容器的Test类: <?php namespace App\Facades; class Test {     public function doSomething()