创建黑名单表迁移:php artisan make:model Models/BlackFeeds -m    (生成模型和迁移文件)

迁移文件中创建如下字段:

public function up(){if (!Schema::hasTable('black_feeds')) {Schema::create('black_feeds', function (Blueprint $table) {$table->integer('user_id')->unsigned()->comment('main user');$table->integer('target_id')->unsigned()->comment('blacked user id');$table->timestamps();$table->index('user_id');});}DB::statement("alter table `black_feeds` comment'拉黑动态用户表'");//表注释}

加入黑名单:用户表(users)

/** 动态加入黑名单.* @Author   Wayne* @DateTime 2018-04-17* @Email    qiaobin@zhiyicx.com* @param    Request             $request [description]* @param    UserModel           $user    [description]* @return   [type]                       [description]*/public function black(Request $request, UserModel $targetUser, UserBlackFeedModel $blackList){$target_id = $targetUser->id;$user_id = $request->user()->id;if ($target_id === $user_id) {return response()->json(['message' => '不能将自己加入黑名单'], 422);}$record = $blackList->where(['user_id' => $user_id, 'target_id' => $target_id])->first();if (! $record) {$record = new UserBlackFeedModel();$record->user_id = $user_id;$record->target_id = $target_id;}$record->save();$cacheKey = sprintf('user-feeded:%s,%s', $target_id, $user_id);Cache::forever($cacheKey, true);return response()->json(['message' => '操作成功'], 201);}

移出黑名单:

/*** 动态移出黑名单.* @Author   Wayne* @DateTime 2018-04-17* @Email    qiaobin@zhiyicx.com* @param    Request             $request [description]* @param    UserModel           $user    [description]* @return   [type]                       [description]*/public function unBlack(Request $request, UserModel $targetUser, UserBlackFeedModel $blackList){$target_id = $targetUser->id;$user_id = $request->user()->id;if ($target_id === $user_id) {return response()->json(['message' => '不能对自己进行操作'], 422);}$blackList->where(['user_id' => $user_id, 'target_id' => $target_id])->delete();$cacheKey = sprintf('user-feeded:%s,%s', $target_id, $user_id);Cache::forget($cacheKey);return response()->json('', 204);}

黑名单列表:

public function blackList(Request $request){$user = $request->user();$offset = $request->input('offset', 0);$limit = $request->input('limit', 15);$blacks = $user->blackfeeds()->with('user')->latest()->limit($limit)->offset($offset)->get();$blacks = $blacks->map(function ($black) use ($user) {$black->user->blackfeeded = true;return $black->user;});return response()->json($blacks, 200);}

用户(User)模型中use以下:

trait UserHasBlackFeeds:

<?php
declare(strict_types=1);

namespace Zhiyi\Plus\Models\Relations;use Zhiyi\Plus\Models\User;
use Zhiyi\Plus\Models\BlackFeeds;
use Illuminate\Support\Facades\Cache;trait UserHasBlackFeeds
{/*** get blacklists of current user.* @Email    qiaobin@zhiyicx.com* @return   [type]              [description]*/public function blackfeeds(){return $this->hasMany(BlackFeeds::class, 'user_id', 'id');}/*** is user blacked by current_user.* @Email    qiaobin@zhiyicx.com* @param    [type]              $user [description]* @return   [type]                    [description]*/public function blackfeeded($user): bool{if ($user instanceof User) {$user = $user->id;}$cacheKey = sprintf('user-feeded:%s,%s', $user, $this->id);if (Cache::has($cacheKey)) {return Cache::get($cacheKey);}$status = $this->blackfeeds()->where('target_id', $user)->first() !== null;Cache::forever($cacheKey, $status);return $status;}
}

比如现在如果想查动态时不显示黑名单中用户的动态就可以如此查询:(动态表Feed)

动态表中增加关联如下:(user_id发布动态用户id)

public function blackfeeds(){return $this->hasMany(BlackFeeds::class, 'target_id', 'user_id');}

动态列表查询(屏蔽黑名单中用户):

$limit = $request->query('limit', 10);$after = $request->query('after');
if (is_null($user = $request->user('api'))) {   abort(401);}$user_id=$request->user('api')->id;
$feedModel->whereDoesntHave('blackfeeds', function ($query) use ($user_id) {return $query->where('user_id', $user_id);})            ->orderBy('id', 'desc')->when((bool) $after, function ($query) use ($after) {return $query->where('id', '<', $after);})->limit($limit)->get();

转载于:https://www.cnblogs.com/sgm4231/p/10700147.html

laravel 黑名单功能实现相关推荐

  1. linux 安全狗 屏蔽ip,网站安全狗ip黑名单功能及使用方法教程

    网站安全狗ip黑名单功能介绍.网站安全狗是一款集网站内容安全防护.网站资源保护及网站流量保护功能为一体的服务器工具.它有IP黑白名单,来保护网站浏览时的安全,那么这IP黑白名单怎么使用呢?接下来小编就 ...

  2. 让QQ好友的黑名单功能失效(转)

    让QQ好友的黑名单功能失效(转) 有时候,由于自己不小心错说了一句话,导致Q友因为"一时不满"将你删除,或是拖到了黑名单中,这样我们就无法再和对方说话了.郁闷啊! 后来学到一个让黑 ...

  3. [android] 手机卫士黑名单功能(列表展示)

    先把要拦截的电话号码保存到数据库中,拦截模式用个字段区分,1 电话拦截,2 短信拦截,3全部拦截 新建Activity类CallSmsSafeActivity.java 新建布局文件activity_ ...

  4. 利用火绒黑名单功能屏蔽风险ip地址

    1.下载安装火绒打开设置黑名单功能 2.http://blackip.ustc.edu.cn/txt.php打开电子复制黑名单ip导入火绒

  5. VOS客户端动态黑名单功能配置详解

    登录VOS3000客户端 进入软交换管理 找到动态黑名单  基础动态黑名单配置主要分成四大模块,下面以第三个红框模块举例,如下图  在被叫号码监控周期范围内,也就是这个配置的600秒之内(第一个参数) ...

  6. dell服务器状态监控系统,Nagios监控Dell服务器硬件状态

    Nagios监控Dell服务器 Server: check_openmanage 是一个 Nagios 的插件,它基于 OMSA 获取相关的报道信息,用来检测安装有 OpenManage Server ...

  7. Nagios监控Dell服务器硬件状态

    Server: check_openmanage 是一个 Nagios 的插件,它基于 OMSA 获取相关的报道信息,用来检测安装有 OpenManage Server Administrator ( ...

  8. quidway secpath 下的安全配置

    一.黑名单 在配置黑名单之前首先要启用防火墙的黑名单功能,这样才会对符合黑名单表项的报文进行过滤.在防火墙目录中点击黑名单进入黑名单配置信息概览页面,单击使能按钮以启用黑名单功能.启用黑名单功能后可单 ...

  9. Atitit.注册跟个登录功能的实现attilax总结obo

    Atitit.注册跟个登录功能的实现attilax总结obo 1. 注册模块 2 1.1. 基本注册功能(用户名方式) 2 1.2. 动态ajax监测用户名重复 2 1.3. 注册手机验证 2 1.4 ...

最新文章

  1. weblogic项目java.sql.SQLException: ORA-01861: 文字与格式字符串不匹配 at oracle.jdbc.....错误解决
  2. 虚拟机中LINUX系统的安装
  3. Docker 常用命令整合!!!带你一起理解和复习每个操作命令!!!带操作图,不会也能看懂的!!
  4. 使用uploadify上传图片时返回“Cannot read property 'queueData' of undefined”
  5. LiveVideoStack线上交流分享 (十一) —— B站Up主上传质量调优实践
  6. ImportError: cannot import name ‘python_2_unicode_compatible‘
  7. Android 防火墙 知乎,知乎回应:防火墙太“坑爹” 正检查用户隐私是否有泄露...
  8. android edittext 不滚动,EditText 设置可以垂直滑动但是不可输入
  9. linux shell 0403-011,shell脚本出现 test:0403-004 Specify a paramater with this command
  10. java计算雷达扫描范围_雷达扫描 - linyinmobayu - 博客园
  11. 姐妹花考上川大本硕博连读,网红兄弟一起上清华
  12. lvds传输距离标准_如何正确看待POE交换机150米、长距离250米传输
  13. WPF学习:3.Border Brush
  14. Python 获得汉字笔画
  15. linux 内核 触摸屏,7. Linux - 触摸屏(电阻屏)驱动程序实现
  16. 名人带货成潮流,直播电商是否走上了岔路?
  17. Ghost Win7删除桌面IE图标
  18. 前端必知必会(一):vue3+node实现网站支付功能
  19. 如何实现中文汉字进行笔划(笔画)排序?
  20. 用户体验设计师、UI 设计师和交互设计师有什么区别?

热门文章

  1. 复旦金融专硕和上财金融专硕
  2. 简易文件夹打包程序的设计与实现
  3. 动圈耳机振膜_耳机振膜的制作方法
  4. 【调剂】华南师范大学(211)生物光子学研究院郭周义课题组招收调剂生
  5. alwayson只读副本失效问题
  6. git merge origin master和git merge origin/master的区别
  7. java双行合一_计算机考复习题2015(理论)
  8. 为什么要用全文搜索引擎:全文搜索引擎 VS 数据库管理系统
  9. Angular入门到精通系列教程(2) - Angular基本概念
  10. 电脑桌面便签用哪一个?