[渠道]渠道管理-优化白名单添加方式
This commit is contained in:
89
app/admin/controller/channel/Manage.php
Normal file
89
app/admin/controller/channel/Manage.php
Normal file
@@ -0,0 +1,89 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\controller\channel;
|
||||
|
||||
use Throwable;
|
||||
use app\common\controller\Backend;
|
||||
|
||||
/**
|
||||
* 渠道管理
|
||||
*/
|
||||
class Manage extends Backend
|
||||
{
|
||||
/**
|
||||
* ChannelManage模型对象
|
||||
* @var object|null
|
||||
* @phpstan-var \app\common\model\ChannelManage|null
|
||||
*/
|
||||
protected ?object $model = null;
|
||||
|
||||
protected array|string $preExcludeFields = ['id', 'create_time', 'update_time', 'secret'];
|
||||
|
||||
protected array $withJoinTable = ['admin'];
|
||||
|
||||
protected string|array $quickSearchField = ['id'];
|
||||
|
||||
protected bool $autoFillAdminId = true;
|
||||
|
||||
public function initialize(): void
|
||||
{
|
||||
parent::initialize();
|
||||
$this->model = new \app\common\model\ChannelManage();
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
* @throws Throwable
|
||||
*/
|
||||
public function index(\Webman\Http\Request $request): \support\Response
|
||||
{
|
||||
$response = $this->initializeBackend($request);
|
||||
if ($response !== null) {
|
||||
return $response;
|
||||
}
|
||||
|
||||
if ($request->get('select') || $request->post('select')) {
|
||||
$this->_select();
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. withJoin 不可使用 alias 方法设置表别名,别名将自动使用关联模型名称(小写下划线命名规则)
|
||||
* 2. 以下的别名设置了主表别名,同时便于拼接查询参数等
|
||||
* 3. paginate 数据集可使用链式操作 each(function($item, $key) {}) 遍历处理
|
||||
*/
|
||||
list($where, $alias, $limit, $order) = $this->queryBuilder();
|
||||
$res = $this->model
|
||||
->withJoin($this->withJoinTable, $this->withJoinType)
|
||||
->visible(['admin' => ['username']])
|
||||
->alias($alias)
|
||||
->where($where)
|
||||
->order($order)
|
||||
->paginate($limit);
|
||||
|
||||
return $this->success('', [
|
||||
'list' => $res->items(),
|
||||
'total' => $res->total(),
|
||||
'remark' => get_route_remark(),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 白名单(页面按钮规则,用于菜单规则中配置按钮权限)
|
||||
* 实际编辑通过 edit 接口提交 ip_white 字段
|
||||
*/
|
||||
public function whitelist(\Webman\Http\Request $request): \support\Response
|
||||
{
|
||||
$response = $this->initializeBackend($request);
|
||||
if ($response !== null) {
|
||||
return $response;
|
||||
}
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* add、edit、del、sortable 已由父类 Backend 实现,无需重写即可直接使用
|
||||
* 若需重写,请确保调用 initializeBackend($request) 并传入 Request 参数
|
||||
* 若模型有 admin_id 字段需自动填充,可设置 protected bool $autoFillAdminId = true
|
||||
*/
|
||||
}
|
||||
84
app/common/model/ChannelManage.php
Normal file
84
app/common/model/ChannelManage.php
Normal file
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
namespace app\common\model;
|
||||
|
||||
use support\think\Model;
|
||||
|
||||
/**
|
||||
* ChannelManage
|
||||
*/
|
||||
class ChannelManage extends Model
|
||||
{
|
||||
// 表名
|
||||
protected $name = 'channel_manage';
|
||||
|
||||
// 自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = true;
|
||||
|
||||
// 字段类型转换
|
||||
protected $type = [
|
||||
'create_time' => 'integer',
|
||||
'update_time' => 'integer',
|
||||
'ip_white' => 'json',
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* 获取 IP 白名单,统一返回字符串数组格式
|
||||
* 兼容:["127.0.0.1"]、[{"value":"127.0.0.1"}]、[{"127.0.0.1":""}]
|
||||
*/
|
||||
public function getipWhiteAttr($value): array
|
||||
{
|
||||
$arr = is_array($value) ? $value : (!$value ? [] : json_decode($value, true));
|
||||
if (!is_array($arr)) {
|
||||
return [];
|
||||
}
|
||||
$result = [];
|
||||
foreach ($arr as $item) {
|
||||
if (is_string($item)) {
|
||||
$result[] = $item;
|
||||
} elseif (is_array($item)) {
|
||||
if (isset($item['value'])) {
|
||||
$result[] = $item['value'];
|
||||
} else {
|
||||
$key = array_key_first($item);
|
||||
if ($key !== null && $key !== '') {
|
||||
$result[] = $key;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return array_values(array_filter($result));
|
||||
}
|
||||
|
||||
/**
|
||||
* 写入 IP 白名单,存储格式 ["127.0.0.1","192.168.1.1"]
|
||||
*/
|
||||
public function setipWhiteAttr($value): array
|
||||
{
|
||||
$arr = is_array($value) ? $value : [];
|
||||
$result = [];
|
||||
foreach ($arr as $ip) {
|
||||
$ip = is_string($ip) ? trim($ip) : '';
|
||||
if ($ip !== '') {
|
||||
$result[] = $ip;
|
||||
}
|
||||
}
|
||||
return array_values($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建时自动生成密钥:strtoupper(md5(name+id))
|
||||
*/
|
||||
protected static function onAfterInsert($model): void
|
||||
{
|
||||
$pk = $model->getPk();
|
||||
$secret = strtoupper(md5($model->name . $model->$pk));
|
||||
$model->where($pk, $model->$pk)->update(['secret' => $secret]);
|
||||
}
|
||||
|
||||
public function admin(): \think\model\relation\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(\app\admin\model\Admin::class, 'admin_id', 'id');
|
||||
}
|
||||
}
|
||||
31
app/common/validate/ChannelManage.php
Normal file
31
app/common/validate/ChannelManage.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace app\common\validate;
|
||||
|
||||
use think\Validate;
|
||||
|
||||
class ChannelManage extends Validate
|
||||
{
|
||||
protected $failException = true;
|
||||
|
||||
/**
|
||||
* 验证规则
|
||||
*/
|
||||
protected $rule = [
|
||||
];
|
||||
|
||||
/**
|
||||
* 提示消息
|
||||
*/
|
||||
protected $message = [
|
||||
];
|
||||
|
||||
/**
|
||||
* 验证场景
|
||||
*/
|
||||
protected $scene = [
|
||||
'add' => [],
|
||||
'edit' => [],
|
||||
];
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user