123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- <?php
- /**
- * Ban.php UTF-8
- * 设备|IP|UDID 封禁
- *
- * @date : 2018/9/7 14:46
- *
- * @license 这不是一个自由软件,未经授权不许任何使用和传播。
- * @author : chenbingling <cbl@huosdk.com>
- * @version : HUOSDK 8.0
- */
- namespace ban;
- use ban\model\IpBanModel;
- use huo\controller\member\MemCache;
- use huolib\constant\CommonConst;
- use huolib\status\CommonStatus;
- class Ban {
- /**
- * 获取当前model
- *
- * @param $type
- *
- * @return IpBanModel|MemCache|bool
- */
- private function getModel($type) {
- switch ($type) {
- case BanConst::BAN_TYPE_MEM:
- return (new MemCache());
- break;
- case BanConst::BAN_TYPE_IP:
- return (new IpBanModel());
- break;
- default:
- return false;
- }
- }
- /**
- * 根据类型获取查询字段
- *
- * @param $type
- *
- * @return array
- */
- private function getField($type) {
- $_field = [
- 'id' => 'id',
- 'create_time' => 'create_time'
- ];
- switch ($type) {
- case BanConst::BAN_TYPE_IP:
- $_field['ip'] = 'ip';
- break;
- case BanConst::BAN_TYPE_DEVICE:
- $_field['device_id'] = 'device_id';
- break;
- case BanConst::BAN_TYPE_UDID:
- $_field['udid'] = 'udid';
- break;
- default:
- return [];
- }
- return $_field;
- }
- /**
- * 根据类型获取查询条件
- *
- * @param $type
- * @param array $param
- *
- * @return array
- */
- private function getWhere($type, $param = []) {
- $_map = [];
- if (!empty($param['start_time']) && !empty($param['end_time'])) {
- $_map['create_time']
- = [
- 'between',
- [
- strtotime($param['start_time']),
- CommonConst::CONST_DAY_SECONDS + strtotime($param['end_time'])
- ]
- ];
- } elseif (!empty($param['start_time'])) {
- $_map['create_time'] = ['egt', strtotime($param['start_time'])];
- } elseif (!empty($param['end_time'])) {
- $_map['create_time'] = ['elt', CommonConst::CONST_DAY_SECONDS + strtotime($param['end_time'])];
- }
- switch ($type) {
- case BanConst::BAN_TYPE_IP:
- if (!empty($param['ip'])) {
- $_map['ip'] = $param['ip'];
- }
- break;
- case BanConst::BAN_TYPE_DEVICE:
- if (!empty($param['device_id'])) {
- $_map['device_id'] = $param['device_id'];
- }
- break;
- case BanConst::BAN_TYPE_UDID:
- if (!empty($param['udid'])) {
- $_map['udid'] = $param['udid'];
- }
- break;
- default:
- }
- return $_map;
- }
- /**
- * 获取封禁列表
- *
- * @param array $param
- * @param string $page
- * @param string $order
- *
- * @return array
- */
- public function getBanList($param = [], $page = '1,10', $order = '-create_time') {
- $_rdata = ['count' => 0, 'list' => []];
- if (empty($param['type'])) {
- return $_rdata;
- }
- $_model = $this->getModel($param['type']);
- $_map = $this->getWhere($param['type'], $param);
- $_count = $_model->where($_map)->count();
- if (empty($_count)) {
- return $_rdata;
- }
- $_field = $this->getField($param['type']);
- $_order = $_model->orderFilter($order);
- $_data = $_model->field($_field)->where($_map)->page($page)->order($_order)->select();
- if (is_object($_data)) {
- $_data = $_data->toArray();
- }
- if (empty($_data)) {
- return $_rdata;
- }
- $_rdata['count'] = $_count;
- $_rdata['list'] = $_data;
- return $_rdata;
- }
- /**
- * 判断是否封禁
- *
- * @param $type string 判断类型 ip|device|udid
- * @param $value string 判断值 根据类型传相应的值
- *
- * @return bool 返回 true 已被封禁 false 未封禁
- */
- public function isBan($type, $value) {
- $_model = $this->getModel($type);
- if (false == $_model) {
- return false;
- }
- $_rs = $_model->isBan($value);
- return $_rs;
- }
- /**
- * 检查玩家使用环境
- *
- * @param $mem_id
- * @param $ip
- *
- * @return bool
- */
- public function checkMemEnv($mem_id, $ip) {
- $_is_ban_1 = $this->isBan(BanConst::BAN_TYPE_MEM, $mem_id);
- if ($_is_ban_1) {
- return BanConst::MEM_BAN_MSG;
- }
- $_is_ban_2 = $this->isBan(BanConst::BAN_TYPE_IP, $ip);
- if ($_is_ban_2) {
- return BanConst::IP_BAN_MSG;
- }
- return CommonStatus::NO_ERROR;
- }
- }
|