SmartAdmin 10.3.4
请升级到 10.10.0 或更高版本。Please upgrade to 10.10.0 or later.
See the version list below for details.
dotnet add package SmartAdmin --version 10.3.4
NuGet\Install-Package SmartAdmin -Version 10.3.4
<PackageReference Include="SmartAdmin" Version="10.3.4" />
<PackageVersion Include="SmartAdmin" Version="10.3.4" />
<PackageReference Include="SmartAdmin" />
paket add SmartAdmin --version 10.3.4
#r "nuget: SmartAdmin, 10.3.4"
#:package SmartAdmin@10.3.4
#addin nuget:?package=SmartAdmin&version=10.3.4
#tool nuget:?package=SmartAdmin&version=10.3.4
English | 简体中文
<p align="center"> <img src="web/public/icon-192.png" width="80" height="80" alt="SmartAdmin"> </p>
<h1 align="center">SmartAdmin</h1>
<p align="center"> <em>三行代码接入完整后台:认证、RBAC、多机构数据权限、字典配置、日志、文件、定时任务。</em> </p>
<p align="center"> <a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-blue" alt="License"></a> <a href="https://github.com/SmartCode-X/SmartAdmin/stargazers"><img src="https://img.shields.io/github/stars/SmartCode-X/SmartAdmin" alt="Stars"></a> <a href="https://github.com/SmartCode-X/SmartAdmin/network/members"><img src="https://img.shields.io/github/forks/SmartCode-X/SmartAdmin" alt="Forks"></a> <a href="https://www.nuget.org/packages/SmartAdmin"><img src="https://img.shields.io/nuget/v/SmartAdmin" alt="NuGet"></a> <img src="https://img.shields.io/badge/.NET-10-512BD4" alt=".NET 10"> </p>
<p align="center"> <a href="https://smartcode-x.github.io/SmartAdmin/zh/"><strong>📖 文档</strong></a> · <a href="https://smartcode-x.github.io/SmartAdmin/zh/guide/getting-started"><strong>🚀 快速开始</strong></a> · <a href="CHANGELOG.md"><strong>📋 更新日志</strong></a> </p>
这是什么
SmartAdmin 是一个以 NuGet 包交付的后台管理系统内核,面向 .NET 10 / ASP.NET Core。用户、角色、菜单、机构、数据权限、字典、配置、日志、文件、定时任务,这些每个后台都要重做一遍的功能装一个包就有,Program.cs 里只需三行:
builder.Services.AddSmartAdmin(builder.Configuration);
var app = builder.Build();
app.MapSmartAdmin();
它和「克隆一个后台模板」的区别在归属:通用功能是包依赖,升级只是换个版本号;仓库里始终只有你自己的业务代码。配套一套自包含的 Vue 3 管理端模板,拷一份就是你项目的前端起点。
亮点
- 零配置起步:默认 SQLite,首启自动建表、写种子,并在控制台打印一次超管密码。换 MySQL、SQL Server、PostgreSQL 只改一处配置。
- 不 fork 就能替换:内置服务全部接口背书、
TryAdd注册,你的实现先注册就赢;长方法拆成virtual小步,继承后只覆写关心的那一步。这条由契约测试ReplaceabilityTests锁定。 - 多机构数据权限内置:全部 / 本机构 / 本机构及以下 / 仅本人 / 自定义机构,五种范围靠 ORM 全局过滤器自动隔离,业务查询不写机构条件。
- 权限码即路由:
GET:/api/v1/xxx就是权限码,代码里没有权限字符串,授权在角色菜单界面勾路由完成。 - 依赖克制:内核运行时只依赖 SqlSugarCore 和 Microsoft.*。Redis、Excel、第三方登录都是可选包,不装不进发布产物。
- 多副本可扩展:可选 Redis 缓存、集群级限流、雪花 WorkerId 自动抢号、反向代理后真实 IP、定时任务数据库选主,两副本以上同一次触发也只跑一次。
- AI 友好:
skills/把新建实体、搭 CRUD、替换服务、加定时任务写成了标准 skills,AI 助手照着就能生成符合规范的代码。
快速开始
环境
- .NET 10 SDK
- Node.js 20+(只在跑前端模板时需要)
方式一:新项目,用模板生成
dotnet new install SmartAdmin.Templates
dotnet new smart-app -n MyApp
cd MyApp
dotnet run
生成的 host 已接线一个机构隔离的示例业务模块(Modules/SampleDoc*),复制那四个文件改名就是你的下一个模块。
方式二:已有项目,装包接入
dotnet add package SmartAdmin
Program.cs 加上前面那三行,JWT、RBAC、数据权限和全部管理端点就注册好了。
首次登录
首启时控制台会打印一段随机超管密码,账号固定 superAdmin,密码只打印这一次:
════════════════════════════════════════════
SmartAdmin 首次启动,已创建超级管理员
账号: superAdmin
密码: xxxxxxxxxxxxxxxx
此密码仅本次显示,请登录后立即修改!
════════════════════════════════════════════
想要固定密码,配 SmartAdmin:Seed:AdminPassword,只对空库生效。三个探针:/health(存活)、/health/ready(数据库 + 缓存就绪)、/openapi/v1.json(仅 Development 挂载,前端生成类型的数据源)。
换数据库
// appsettings.json
"SmartAdmin": {
"Database": {
"DbType": "MySql", // Sqlite | MySql | SqlServer | PostgreSQL
"ConnectionString": "...",
"CodeFirstVersion": "2026.09.06" // 可选:版本号不变就跳过建表扫描,表多、库远时启动更快
}
}
在本仓库里跑一遍
git clone https://github.com/SmartCode-X/SmartAdmin.git
cd SmartAdmin
dotnet run --project backend/samples/MinimalHost # 后端 → http://localhost:5100
cd web && npm install && npm run dev # 前端 → http://localhost:5173
Windows 上双击 dev-start.bat 一键起前后端,dev-stop.bat 停。要一条命令起全栈(MySQL + Redis + 后端 + Caddy 托管前端)用 docker compose up,双副本验证用 docker-compose.scale.yml。
功能清单
后端内核
| 领域 | 内容 |
|---|---|
| 认证 | 账号密码、图形验证码(三种,默认关)、JWT + 刷新令牌轮换、登录锁定、在线会话与强制下线、短信免密登录与二次验证、密码历史与过期策略;可选 TOTP(含恢复码)、Cookie + CSRF 会话模式 |
| 外部登录 | 内置 OIDC,IExternalAuthProvider 扩展点,个人中心绑定 / 解绑;企业微信、钉钉、GitHub、个人微信为可选包 |
| RBAC | 角色、目录 / 页面 / 按钮三级菜单、角色菜单授权、角色转授策略;权限码即规范化路由 |
| 数据权限 | 五种数据范围,ORM 全局过滤器强制;用户、机构、文件管理同样遵守调用者范围 |
| 多应用门户 | 模块管理、每应用独立菜单树、登录后选 / 切应用 |
| 组织 | 机构树、岗位、用户多角色与主属机构、回收站(软删恢复与永久删除) |
| 字典与配置 | 字典类型 / 项、配置中心分组页签、事件驱动失效缓存 |
| 通知公告 | 全员 / 角色 / 用户定向发布;SignalR 实时推送可选开启 |
| 日志 | 操作日志(敏感输入脱敏)、登录日志、异常日志 |
| 文件 | 上传下载、分片续传与秒传、大小与后缀限制、路径穿越防护、签名直链、软删文件磁盘回收 |
| 定时任务 | 内核自带调度器:cron(6 段秒级,含 L / W / #)、固定间隔、一次性三种触发;IAdminJob、HTTP、SQL 三种载荷;数据库选主 + 触发 CAS 防双发;可选独立 Worker 进程 |
| 导入导出 | xlsx 导入向导(预览、逐格校验、查重、部分提交)与列可选导出,由可选包 SmartAdmin.Excel 提供 |
| 数据库 | SQLite / MySQL / SQL Server / PostgreSQL 配置切换;同进程副数据库(多 ConfigId);CodeFirstVersion 门控建表扫描 |
| 多副本 | 可选 Redis 缓存、集群级限流、雪花 WorkerId 文件锁抢号(跨机器显式配)、反向代理后真实客户端 IP |
| 其他 | IEmailSender(默认 SMTP)、服务器监控、健康探针、开发期 OpenAPI |
NuGet 包
| 包 | 作用 |
|---|---|
SmartAdmin |
元包,装它即引入下面四个内核包 |
SmartAdmin.Core |
契约层:接口、Options、Result<T>、错误码、雪花 ID,零运行时依赖 |
SmartAdmin.SqlSugar |
数据层:SqlSugar 单例、CodeFirst 建表、幂等种子、审计 / 软删 / 数据范围全局过滤器、泛型仓储 |
SmartAdmin.Services |
领域层:实体与全部业务服务 |
SmartAdmin.AspNetCore |
宿主层:AddSmartAdmin / MapSmartAdmin、JWT、[RolePermission]、内置控制器与过滤器 |
SmartAdmin.Excel |
可选:xlsx 导入导出 |
SmartAdmin.Caching.Redis |
可选:Redis 缓存提供方,多副本共享会话与缓存 |
SmartAdmin.Auth.WeCom / .DingTalk / .GitHub / .WeChat |
可选:第三方登录提供方 |
SmartAdmin.Testing |
测试基础设施:AdminAppFactory<Program>、四方言 TestDb、信封小助手;只进测试项目,不进生产 |
SmartAdmin.Templates |
dotnet new smart-app 项目模板 |
全部包共用一个版本号,主版本跟随内核所用的 .NET 主版本(10.x 对应 .NET 10)。
前端模板
web/ 是一套自包含的管理端模板,不发 npm 包,拷一份归你自己改:
| 项 | 值 |
|---|---|
| 技术栈 | Vue 3 + Naive UI + Pinia + vue-router + vue-i18n |
| API | 由后端 /openapi/v1.json 生成 schema.d.ts,端到端类型安全,npm run gen:api 刷新 |
| 路由与权限 | 后端菜单树驱动动态路由,多应用切换;v-auth 指令按钮级权限,权限码与后端路由一致 |
| 组件 | ProTable(列驱动表格)、FormContainer(弹窗 / 抽屉二合一)、StatusSwitch、字典组件集、OrgTreeSelect、FileUpload(分片续传)、ImportWizard、CronEditor、Chart 等,清单见 web/COMPONENTS.md |
| 主题与登录 | 设计令牌 + 明暗主题,三套可切换登录皮肤,zh-CN / en-US 双语 |
ProTable、IconPicker 已拆成独立 npm 包(tenon-naive-pro-table、tenon-naive-iconify-picker),任意 Vue 3 + Naive UI 项目都能单装。
运行时架构
一次管理端请求自上而下走过四层:前端 → 宿主(控制器、鉴权管道)→ 领域服务 → SqlSugar 与数据库,每层对应一个 NuGet 包,四层都建在 SmartAdmin.Core 契约层上。缓存、外部登录、实时推送、定时任务与可选的 Worker 进程挂在旁路。
<p align="center"> <a href="docs/architecture/smart-runtime.zh-CN.svg"> <img src="docs/architecture/smart-runtime.zh-CN.readme.png" alt="SmartAdmin 运行时架构" width="100%"> </a> </p>
<p align="center"> <a href="docs/architecture/smart-runtime.zh-CN.svg"><strong>查看矢量图(SVG)</strong></a> </p>
替换与扩展
内置实现不合用就换掉,先于 AddSmartAdmin 注册即可:
builder.Services.AddSingleton<IPasswordHasher, MyPasswordHasher>(); // 你的先注册,内置的让道
builder.Services.AddSmartAdmin(builder.Configuration);
只想改一步,继承内置服务覆写那个 virtual 方法。业务模块放在你自己的程序集里,经 options.ApplicationAssemblies 登记后实体自动建表、控制器自动挂路由。完整流程见文档站的新建业务模块与替换内置服务;仓库 skills/ 目录是同一套流程的 agent 版本(/new-module、/create-crud-backend、/replace-service、/create-job 等)。
仓库结构
| 目录 | 说明 |
|---|---|
backend/ |
内核 4 包 + 元包 + 6 个可选包,样例宿主(MinimalHost、WorkerHost),xUnit v3 测试 |
web/ |
Vue 3 + Naive UI 管理端模板,独立运行 |
templates/ |
dotnet new smart-app 项目模板 |
site/ |
文档站源码(VitePress,中英) |
skills/ |
开发规范 skills,供开发者与 AI 助手使用 |
docs/ |
设计文档、ADR、发版手册 |
版本与贡献
开发在 dev,发布在 main,v* tag 触发打包并发到 nuget.org。变更以 CHANGELOG 为准,破坏性变更在对应版本段落顶部加粗提示。欢迎 issue 与 PR,安全问题按 SECURITY.md 报告。
许可证
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- SmartAdmin.AspNetCore (>= 10.3.4)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | |
|---|---|---|---|
| 10.12.1 | 0 | 9/14/2026 | |
| 10.12.0 | 33 | 9/14/2026 | |
| 10.11.0 | 37 | 9/14/2026 | |
| 10.10.1 | 45 | 9/13/2026 | |
| 10.10.0 | 73 | 9/13/2026 | |
| 10.5.0 | 65 | 9/12/2026 | |
| 10.4.0 | 71 | 9/11/2026 | |
| 10.3.4 | 97 | 9/10/2026 | |
| 10.3.3 | 102 | 9/8/2026 | |
| 10.3.2 | 104 | 9/8/2026 | |
| 10.3.1 | 111 | 9/7/2026 | |
| 10.3.0 | 107 | 9/7/2026 | |
| 10.2.0 | 112 | 9/6/2026 | |
| 10.1.1 | 107 | 9/6/2026 | |
| 10.1.0 | 112 | 9/6/2026 | |
| 10.0.2 | 115 | 9/6/2026 | |
| 10.0.1 | 109 | 9/5/2026 | |
| 10.0.0 | 108 | 9/5/2026 |