初始化

This commit is contained in:
2026-03-02 13:44:38 +08:00
commit 05b785083c
677 changed files with 58662 additions and 0 deletions

188
addons/webman/Admin.php Normal file
View File

@@ -0,0 +1,188 @@
<?php
namespace addons\webman;
use addons\webman\controller\AttachmentController;
use addons\webman\filesystem\Filesystem;
use ExAdmin\ui\component\form\field\Editor;
use ExAdmin\ui\component\form\field\upload\File;
use ExAdmin\ui\component\form\field\upload\Image;
use ExAdmin\ui\support\Container;
use ExAdmin\ui\support\Token;
use Iidestiny\Flysystem\Oss\OssAdapter;
use Overtrue\Flysystem\Qiniu\QiniuAdapter;
use support\Cache;
class Admin
{
protected static $permissions = [];
/**
* 方法是否存在
* @param $class 类
* @param $method 方法
* @return bool
* @throws \ReflectionException
*/
public static function methodExists($class, $method)
{
$constructor = new \ReflectionClass($class);
if ($constructor->hasMethod($method)) {
$method = $constructor->getMethod($method);
if ($constructor->name == $method->class) {
return true;
}
}
return false;
}
/**
* 权限节点
* @return \ExAdmin\ui\auth\Node
*/
public static function node()
{
return \ExAdmin\ui\support\Container::getInstance()->node;
}
/**
* 权限
* @return array
*/
public static function permission()
{
$permissionKey = 'ADMIN_PERMISSIONS_' . Admin::id();
$adminPermissions = Cache::get($permissionKey);
if(empty($adminPermissions)){
$adminPermissions = Admin::user()->permission->pluck('node_id')->toArray();
Cache::set($permissionKey, $adminPermissions);
}
return $adminPermissions;
}
/**
* 角色
* @return array
*/
public static function role()
{
return Admin::user()->roles->pluck('id')->toArray();
}
/**
* 用户
* @return mixed
*/
public static function user()
{
return Token::user();
}
/**
* 用户id
* @return int|string|null
*/
public static function id()
{
return Token::id();
}
public static function check($class, $function, $method)
{
$node = Admin::node()->all();
$node = array_column($node, 'id');
$actions[] = str_replace('-', '\\', $class) . '\\' . $function;
$actions[] = str_replace('-', '\\', $class) . '\\' . $function . '-' . strtolower($method);
foreach ($actions as $action) {
if (in_array($action, $node)) {
if (Admin::id() == plugin()->webman->config('admin_auth_id')) {
return true;
}
if (!in_array($action, Admin::permission())) {
return false;
}
}
}
return true;
}
public static function getDispatch()
{
$class = null;
$function = null;
if (request()->route->getPath() == '/ex-admin/{class}/{function}') {
$class = request()->route->param('class');
$function = request()->route->param('function');
}
return [$class, $function];
}
/**
* 上传初始化配置
*/
public static function uploadInit()
{
$uploadDiskConfig = function ($disk) {
$config = config("plugin.rockys.ex-admin-webman.filesystems.disks.$disk");
//上传初始化
$uploadConfig['driver'] = 'local';
$adapter = Filesystem::disk($disk)->getAdapter();
if ($config['driver'] == QiniuAdapter::class) {
$uploadConfig['domain'] = $config['domain'];
$uploadConfig['uploadToken'] = $adapter->getUploadToken(null, 3600 * 3);
$uploadConfig['driver'] = 'qiniu';
} elseif ($config['driver'] == OssAdapter::class) {
$adapter->setCdnUrl($config['domain']);
$uploadConfig['domain'] = $config['domain'];
$uploadConfig['accessKey'] = $config['access_key'];
$uploadConfig['secretKey'] = $config['secret_key'];
$uploadConfig['region'] = $config['region'];
$uploadConfig['bucket'] = $config['bucket'];
$uploadConfig['driver'] = 'oss';
}
return $uploadConfig;
};
$uploadDisk = function ($disk) use ($uploadDiskConfig) {
$uploadConfig = $uploadDiskConfig($disk);
foreach ($uploadConfig as $key => $value) {
$this->$key($value);
}
$this->attr('disk', $disk);
return $this;
};
Image::addMethod('disk', $uploadDisk);
File::addMethod('disk', $uploadDisk);
Editor::addMethod('disk', function ($disk) use ($uploadDiskConfig) {
$uploadConfig = $uploadDiskConfig($disk);
$uploadConfig['disk'] = $disk;
$this->upload($uploadConfig + ['progress' => true]);
});
$finder = function ($upload, $type = '') {
$grid = Container::getInstance()
->make(\ExAdmin\ui\Route::class)
->invokeMethod(AttachmentController::class, 'index', [
'size' => $upload->attr('fileSize'),
'ext' => $upload->attr('ext'),
'type' => $type,
'customStyle' => null
]
);
$grid->selectionField('url');
$grid->params(['selectionField' => 'url']);
$attrs = $upload->getAttrs();
unset($attrs['progress'], $attrs['onlyShow'], $attrs['type']);
$grid->attr('tools')[0]->attrs($attrs);
$upload->attr('finder', $grid);
};
Image::beforeEnd(function ($image) use ($finder) {
$finder($image, 'image');
});
File::beforeEnd(function ($file) use ($finder) {
$finder($file);
});
}
}