普遍问题🔓
普遍问题🔓
禁止运行脚本
错误内容:npm : 无法加载文件 D:\nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本。
因为在此系统上禁止运行脚本,也就是说没有权限呗,看一下:
d:> get-ExecutionPolicy
Restricted
受限制的,表示状态是禁止的,那就给个权限: Set-ExecutionPolicy -Scope CurrentUser 输入:RemoteSigned
服务器重启、更新需要重新登录
在使用本项目中,如果经常更新后端就会发现,除了 admin 账号,其他账号登录每次更新服务端都会要求重新登录。 是因为在登录成功后用户的权限存储在内存中。
- 解决办法
我们只需要将存储的方法改为 redis
即可解决
修改CacheService
方法
public class CacheService
{
#region 用户权限 缓存
public static List<string> GetUserPerms(string key)
{
return (List<string>)CacheHelper.GetCache(key);
//return RedisServer.Cache.Get<List<string>>(key).ToList();
}
public static void SetUserPerms(string key, object data)
{
CacheHelper.SetCache(key, data);
//RedisServer.Cache.Set(key, data);
}
public static void RemoveUserPerms(string key)
{
CacheHelper.Remove(key);
//RedisServer.Cache.Del(key);
}
#endregion
}
修改头像提示 Cors 跨域问题
出现这个问题的原因是由于自己部署到服务器后,没有正确的配置导致的
以前端部署 nginx
,后端iis
为例
1、浏览器通过访问类似这样的地址
http://www.izhaorui.cn
2、nginx 配置
- 3、 修改
appsettings.json
文件
"Upload": {
//远程存储资源访问路径, /prod-api 根据项目具体配置 例如最后存储的图像地址是: http://demo.izhaorui.cn/prod-api/avatar/2024/0508/B37E12C7E0D2F2F3.png
"uploadUrl": "http://demo.izhaorui.cn/prod-api"
},
Frombody 获取参数为 null
使用 [Frombody SysUserDto dto]
获取请求参数为 null
是这样微软的程序员在.net core 3.1 中 Newtonsoft.Json 替换为了 System.Text.Json
在.NET Core 3 之前,ASP.NET Core 在内部使用了 Newtonsoft.Json,现在它使用的是 System.Text.Json。
一个例子是一个数字字段,例如 SysUserDto.Status。如果从 Javascript 中传递“10”或 10,Newtonsoft.Json 将处理这个问题并将两者识别为 10。默认情况下,对于 System.Text.Json,该字段不能有引号,如果在 Json 中发布了引号,则会得到一个空的[FromBody]值。
- 解决方案一(已废弃)
全局解决
services.AddJsonOptions(options =>
{
options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.AllowReadingFromString |
JsonNumberHandling.WriteAsString;
options.JsonSerializerOptions.WriteIndented = true;
});
- 解决方案二
var body = HttpContext.GetBody();
CustomerDto dto = JsonConvert.DeserializeObject<CustomerDto>(body);
如何不登录直接访问接口
如何新增系统图标
如何去掉前端侧边栏 New 标记
- 1、添加菜单 7 天后会自动消失
- 2、
src/settings.js
配置menuShowNew
设置成false
如何调整左侧菜单宽度
如果觉得左侧菜单宽度不够,可以进行调整。
在\src\assets\styles\variables.module.scss
修改变量--el-aside-width: 200px
;
nodejs 版本过高解决方案
由于nodejs
版本过高,可能会导致vue-cli
项目运行报错。
- 解决方案 1:每次启动项目前,输入配置命令:
set NODE_OPTIONS=--openssl-legacy-provider
- 解决方案 2:修改
package.json
配置文件:
"dev": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --open",
"build:prod": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build --report",
"build:stage": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build --mode staging",
"preview": "set NODE_OPTIONS=--openssl-legacy-provider && node build/index.js --preview",
控制台 debuger 位置错误问题
ZRAdmin-Vue3
中的vite-plugin-vue-setup-extend
用于解决 vue3 下 script setup 语法糖下 ,手动设置组件name
不方便的问题。可能会导致 vue 组件 debuger 时, 断点位置不正确问题,(直至 0.4.0 版本依旧有该问题)。
目前的解决方案如下:
- 1、
package.json
新增类型为commonjs
{
"name": "zr.admin",
"version": "3.8.2",
"description": "ZRAdmin.NET管理系统",
"author": "ZR",
"license": "MIT",
"type": "commonjs",
}
2、
vite-plugin-vue-setup-extend
替换为unplugin-vue-setup-extend-plus
3、
vite\plugins\setup-extend.js
修改为unplugin-vue-setup-extend-plus/vite
import setupExtend from 'unplugin-vue-setup-extend-plus/vite';
export default function createSetupExtend() {
return setupExtend({});
}
如何查看日志文件 NLog
项目采用Nlog
来记录日志,存储目录在 {发布后项目目录}/adminlogs
all.txt
记录所有的日志sql.txt
所有 sql 日志error.txt
所有错误日志bak 文件夹为备份
使用 Nlog 记录日志到文件
private NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
logger.Info("我是Info日志")
logger.Error("我是错误级别日志")
...
如何限制账户不允许多终端登录
本项目通过signalr
来实现,即登录当前设备后,其他设备登录的账号就会自动被踢下线
修改配置文件appsettings.json
{
"SingleLogin": true //是否单设备登录
}
如何开启其他、手机、扫码登录
修改配置src/settings.js
/**
* 是否显示QR登录
*/
showQrLogin: true,
/**
* 是否显示手机号登录
*/
showPhoneLogin: true,
/**
* 是否显示其他登录
*/
showOtherLogin: true,
非管理员账号操作提示你当前没有权限
出现这个问题是因为你没有为当前角色
添加对应的权限
- 去菜单管理里面检查是否为当前菜单添加了对应的菜单/按钮权限
- 角色管理里面查看是否为当前角色添加了对应的权限
下面的图可以很明显的看到是没有上面提示的权限的
如何修改启动页地址 🆕
- 1、通过 vs 启动 修改配置
launchSettings.json
"profiles": {
"ZR.Admin.WebApi": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchUrl": "",
"applicationUrl": "http://localhost:8888",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
- 2、通过项目根目录
startup.bat
启动 修改配置appsettings.json
"urls": "http://localhost:8888", //项目启动url,如果改动端口前端对应devServer也需要进行修改
提示
如果希望外网可以访问,将地址改为 http://[*]:8888
如何获取我所有的权限 🆕
- 通过缓存获取
//例如获取用户id = 2 的所有权限
var userId = 2
List<string> perms = CacheService.GetUserPerms(GlobalConstant.UserPermKEY + userId);
- 通过数据库获取
var userId = 2
var perms = sysPermissionService.GetMenuPermission(new SysUser() { UserId = userId });