SmartAdmin 10.3.4

Additional Details

请升级到 10.10.0 或更高版本。Please upgrade to 10.10.0 or later.

There is a newer version of this package available.
See the version list below for details.
dotnet add package SmartAdmin --version 10.3.4
                    
NuGet\Install-Package SmartAdmin -Version 10.3.4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SmartAdmin" Version="10.3.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SmartAdmin" Version="10.3.4" />
                    
Directory.Packages.props
<PackageReference Include="SmartAdmin" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SmartAdmin --version 10.3.4
                    
#r "nuget: SmartAdmin, 10.3.4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package SmartAdmin@10.3.4
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=SmartAdmin&version=10.3.4
                    
Install as a Cake Addin
#tool nuget:?package=SmartAdmin&version=10.3.4
                    
Install as a Cake Tool

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-tabletenon-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 个可选包,样例宿主(MinimalHostWorkerHost),xUnit v3 测试
web/ Vue 3 + Naive UI 管理端模板,独立运行
templates/ dotnet new smart-app 项目模板
site/ 文档站源码(VitePress,中英)
skills/ 开发规范 skills,供开发者与 AI 助手使用
docs/ 设计文档、ADR、发版手册

版本与贡献

开发在 dev,发布在 mainv* tag 触发打包并发到 nuget.org。变更以 CHANGELOG 为准,破坏性变更在对应版本段落顶部加粗提示。欢迎 issue 与 PR,安全问题按 SECURITY.md 报告。

许可证

Apache License 2.0

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.