Ban.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. <?php
  2. /**
  3. * Ban.php UTF-8
  4. * 设备|IP|UDID 封禁
  5. *
  6. * @date : 2018/9/7 14:46
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : chenbingling <cbl@huosdk.com>
  10. * @version : HUOSDK 8.0
  11. */
  12. namespace ban;
  13. use ban\model\IpBanModel;
  14. use huo\controller\member\MemCache;
  15. use huolib\constant\CommonConst;
  16. use huolib\status\CommonStatus;
  17. class Ban {
  18. /**
  19. * 获取当前model
  20. *
  21. * @param $type
  22. *
  23. * @return IpBanModel|MemCache|bool
  24. */
  25. private function getModel($type) {
  26. switch ($type) {
  27. case BanConst::BAN_TYPE_MEM:
  28. return (new MemCache());
  29. break;
  30. case BanConst::BAN_TYPE_IP:
  31. return (new IpBanModel());
  32. break;
  33. default:
  34. return false;
  35. }
  36. }
  37. /**
  38. * 根据类型获取查询字段
  39. *
  40. * @param $type
  41. *
  42. * @return array
  43. */
  44. private function getField($type) {
  45. $_field = [
  46. 'id' => 'id',
  47. 'create_time' => 'create_time'
  48. ];
  49. switch ($type) {
  50. case BanConst::BAN_TYPE_IP:
  51. $_field['ip'] = 'ip';
  52. break;
  53. case BanConst::BAN_TYPE_DEVICE:
  54. $_field['device_id'] = 'device_id';
  55. break;
  56. case BanConst::BAN_TYPE_UDID:
  57. $_field['udid'] = 'udid';
  58. break;
  59. default:
  60. return [];
  61. }
  62. return $_field;
  63. }
  64. /**
  65. * 根据类型获取查询条件
  66. *
  67. * @param $type
  68. * @param array $param
  69. *
  70. * @return array
  71. */
  72. private function getWhere($type, $param = []) {
  73. $_map = [];
  74. if (!empty($param['start_time']) && !empty($param['end_time'])) {
  75. $_map['create_time']
  76. = [
  77. 'between',
  78. [
  79. strtotime($param['start_time']),
  80. CommonConst::CONST_DAY_SECONDS + strtotime($param['end_time'])
  81. ]
  82. ];
  83. } elseif (!empty($param['start_time'])) {
  84. $_map['create_time'] = ['egt', strtotime($param['start_time'])];
  85. } elseif (!empty($param['end_time'])) {
  86. $_map['create_time'] = ['elt', CommonConst::CONST_DAY_SECONDS + strtotime($param['end_time'])];
  87. }
  88. switch ($type) {
  89. case BanConst::BAN_TYPE_IP:
  90. if (!empty($param['ip'])) {
  91. $_map['ip'] = $param['ip'];
  92. }
  93. break;
  94. case BanConst::BAN_TYPE_DEVICE:
  95. if (!empty($param['device_id'])) {
  96. $_map['device_id'] = $param['device_id'];
  97. }
  98. break;
  99. case BanConst::BAN_TYPE_UDID:
  100. if (!empty($param['udid'])) {
  101. $_map['udid'] = $param['udid'];
  102. }
  103. break;
  104. default:
  105. }
  106. return $_map;
  107. }
  108. /**
  109. * 获取封禁列表
  110. *
  111. * @param array $param
  112. * @param string $page
  113. * @param string $order
  114. *
  115. * @return array
  116. */
  117. public function getBanList($param = [], $page = '1,10', $order = '-create_time') {
  118. $_rdata = ['count' => 0, 'list' => []];
  119. if (empty($param['type'])) {
  120. return $_rdata;
  121. }
  122. $_model = $this->getModel($param['type']);
  123. $_map = $this->getWhere($param['type'], $param);
  124. $_count = $_model->where($_map)->count();
  125. if (empty($_count)) {
  126. return $_rdata;
  127. }
  128. $_field = $this->getField($param['type']);
  129. $_order = $_model->orderFilter($order);
  130. $_data = $_model->field($_field)->where($_map)->page($page)->order($_order)->select();
  131. if (is_object($_data)) {
  132. $_data = $_data->toArray();
  133. }
  134. if (empty($_data)) {
  135. return $_rdata;
  136. }
  137. $_rdata['count'] = $_count;
  138. $_rdata['list'] = $_data;
  139. return $_rdata;
  140. }
  141. /**
  142. * 判断是否封禁
  143. *
  144. * @param $type string 判断类型 ip|device|udid
  145. * @param $value string 判断值 根据类型传相应的值
  146. *
  147. * @return bool 返回 true 已被封禁 false 未封禁
  148. */
  149. public function isBan($type, $value) {
  150. $_model = $this->getModel($type);
  151. if (false == $_model) {
  152. return false;
  153. }
  154. $_rs = $_model->isBan($value);
  155. return $_rs;
  156. }
  157. /**
  158. * 检查玩家使用环境
  159. *
  160. * @param $mem_id
  161. * @param $ip
  162. *
  163. * @return bool
  164. */
  165. public function checkMemEnv($mem_id, $ip) {
  166. $_is_ban_1 = $this->isBan(BanConst::BAN_TYPE_MEM, $mem_id);
  167. if ($_is_ban_1) {
  168. return BanConst::MEM_BAN_MSG;
  169. }
  170. $_is_ban_2 = $this->isBan(BanConst::BAN_TYPE_IP, $ip);
  171. if ($_is_ban_2) {
  172. return BanConst::IP_BAN_MSG;
  173. }
  174. return CommonStatus::NO_ERROR;
  175. }
  176. }