# MyFurion **Repository Path**: taoliwanyang/my-furion ## Basic Information - **Project Name**: MyFurion - **Description**: 项目使用Furion开源框架、SqlSugar开源多库架构ORM框架、.Net6,用户登录、角色、权限、部门、菜单、数据字典、日志、多租户等基础功能的实现 - **Primary Language**: C# - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 18 - **Forks**: 6 - **Created**: 2023-06-30 - **Last Updated**: 2025-09-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: Furion, sqlsugar ## README # MyFurion #### 介绍 项目使用Furion开源框架、SqlSugar开源多库架构ORM框架、.Net6,用户登录、角色、权限、部门、菜单、数据字典、日志、多租户等基础功能的实现 #### 软件架构 软件架构说明 1. MyFurion.Application:业务仓储、Dto实体类、Controller接口 2. MyFurion.Model:数据库实体 3. MyFurion.Start:数据库IOC注册、JWT、Service等注册启动 4. MyFurion.Unility:通用方法类 5. MyFurion.WebApi:程序启动入口 #### 安装教程 1. IIS部署(略) 2. 特别注意 如果 IIS部署方式下,使用定时任务,需要设置 IIS 禁止回收 1)应用池—右击—高级设置—常规—启动模式—选择AlwaysRunning 2)应用池—右击—高级设置—进程模型—闲置超时(分钟)的值修改为0 #### 使用说明 1.配置文件 - MyFurion.WebApi——appsettings.json 包含数据库连接、Redis连接、Swagger、接口风格等基础配置 2.SqlSugar数据库IOC注册 - MyFurion.Start——SqlSugarSetup.cs 3.日志 - 日志订阅 MyFurion.Start——LogFilter/LogEventSubscriber.cs - 全局错误日志 MyFurion.Start——LogFilter/ErrorLogFilter.cs - 接口请求日志 MyFurion.Start——LogFilter/RequestLogFilter.cs - Sql查询日志 - 本地log文件存储 MyFurion.Start——Startup.cs 中日志配置 services.AddFileLogging - 本地日志定时清除任务 MyFurion.Start——WorkJob/LogJob.cs;Startup.cs 中 services.AddSchedule - 数据库存储日志 MyFurion.Start——Handlers/DatabaseLoggingWriter.cs 4.身份鉴权Jwt token - MyFurion.Start——Handlers/JwtHandler.cs - 登录 (参见 http://furion.baiqian.ltd/docs/auth-control#155-%E8%87%AA%E5%8A%A8%E5%88%B7%E6%96%B0-token) 1)接口Response.Headers中返回token(access-token)及刷新token(x-access-token) 2)Web端每次请求需将 accessToken 和 refreshToken 放到请求报文头中传送到服务端,格式为 Authorization: Bearer 你的token X-Authorization: Bearer 你的刷新token 在正常开发中,refreshToken 无需每次请求携带,而是 accessToken 即将过期之后携带即可。可以在客户端自行判断 accessToken 是否即将过期 - Web端解析Jwt (参见http://furion.baiqian.ltd/docs/auth-control#157-%E5%89%8D%E7%AB%AF%E8%A7%A3%E5%AF%86-jwt-%E4%BF%A1%E6%81%AF) TypeScript 版本 ``` /** * 解密 JWT token 的信息 * @param token jwt token 字符串 * @returns object */ function decryptJWT(token: string): any { token = token.replace(/_/g, "/").replace(/-/g, "+"); var json = decodeURIComponent(escape(window.atob(token.split(".")[1]))); return JSON.parse(json); } ``` JavaScript 版本 ``` /** * 解密 JWT token 的信息 * @param token jwt token 字符串 * @returns object */ function decryptJWT(token) { token = token.replace(/_/g, "/").replace(/-/g, "+"); var json = decodeURIComponent(escape(window.atob(token.split(".")[1]))); return JSON.parse(json); } ``` 可以在解密之后读取 过期时间 exp 来解决请求时是否需要带刷新 Token,比如即将过期前 5 分钟 用户退出登录 会将token和刷新token存储入redis,做为token黑名单 5.基于角色的权限配置 - 菜单权限配置 - 机构数据权限配置 6.Api统一返回数据格式 `{ "success":true,//是否成功 "code":200,//状态码 "message":"请求成功",//消息 "data":null//数据内容 }` 7.接口权限认证 - 接口中配置ActionPermission - [HttpPut("add")] - [ActionPermission("userAdd")] #### 参与贡献 1. Furion http://furion.baiqian.ltd/docs/category/getstart 2. SqlSugar https://www.donet5.com/Home/Doc #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)