系统管理指南

本节介绍 QuickAdmin.Net 内置管理功能,请对照示例项目或在线演示open in new window阅览。

管理员说明

管理员设计有 超级管理员各级机构管理员,实现分级管理。

超级管理员 负责系统的初始化、配置以及日常维护工作,可去指定各级机构管理员,但不能参与业务,通常由开发或运维人员担任。 在后端数据库中,超级管理员存储于单独的表中,和系统用户表是分开的。
系统管理员(也叫根机构管理员) 负责整个机构的部门、用户管理以及授权工作,可去指定下级机构管理员,由上级部门相关人员担任。
下级管理员 负责其所在级别机构的部门、用户管理以及授权工作,由下级部门相关人员担任。

管理员具体分到几级可按需求自行决定。默认分了两级,即 系统管理员二级单位管理员

内置管理页面

QuickAdmin.Net 内置的系统管理相关 Razor 页面位于名为 "QAdmin" 的区域(Area)下,即各内置页面的相对路径是:

~/QAdmin/xxx

页面 "~/QAdmin/Setup/BuiltInPageList" 列出了所有内置的系统管理相关 Razor 页面,并指出了各页面对哪些用户可用。

本节没有把所有内置页面以及页面内的功能细节一一列出,请打开具体页面查看。关于各个数据项的说明,请到其对应实体的参考文档open in new window查阅。

基础数据初始化

系统基础数据初始化由 超级管理员 负责,可按以下顺序依次执行:
组织机构 -> 角色类别 -> 角色 -> 权限类别 -> 权限 -> 角色授权(角色拥有的权限) -> 用户 -> 用户授权(用户拥有的角色/权限) -> 首页功能菜单(侧边栏系统菜单、顶部快速链接以及右上用户菜单)

具体过程可根据实际情况调整,比如你的系统无须权限数据,只用角色就可满足授权需求,那就不用去初始化 权限类别/权限 等。
QuickAdmin.Net 也提供了基础数据的导出、导入功能以方便迁移,具体见 导出系统基础数据导入系统基础数据 页面。

TIP

在大部分列表页面里,用鼠标双击记录行可直接打开编辑界面,等同于选取行然后点击页面里的 "编辑" 按钮。

进入 系统参数 页面,新建 Id 为 "AdminExclusiveModeMsg" 的记录并输入提示消息,系统将进入超级管理员独占模式,即:只允许超级管理员登录,其他用户登录时会弹出该提示消息(已登录用户不受影响)。

组织机构与用户

QuickAdmin.Net 内置了两种用来维护组织机构open in new window的页面,表格列表形式页面:

~/QAdmin/Dept/List

和树形式页面:

~/QAdmin/Dept/TreeModeList

可自行决定在系统菜单里添加哪一个供管理员使用。页内均提供了批量快速添加等等功能。

管理员在新增用户open in new window时,若不指定密码,新用户密码将是默认密码。 默认密码是 DefaultPasswordPrefix 配置open in new window 加上用户的 AccountIdopen in new window。 可通过重写 UserServiceopen in new windowGenerateDefaultPassword()open in new window 方法去定制默认密码(参见下一章节里的自定义内置服务部分说明)。

若用户的密码是默认密码,在登录后系统将强制用户修改密码,修改后才能继续使用系统。用户也不能把自己的密码修改为默认密码。

AllowAdminSpecifyUserPasswordopen in new window 以及 AllowAdminResetUserPasswordopen in new window 配置决定管理员能否给用户指定密码以及能否重置用户密码。

EnableUserMobileVerificationopen in new window/ EnableUserEmailVerificationopen in new window 配置分别决定用户能否直接修改自己的手机号码/邮箱地址,还是需要验证一下。

组织机构与用户均被设计为软删除实体,并且记录了用户部门日志(即用户的部门调动记录),以便能够查询历史业务。同时也提供了永久删除功能。

角色与权限

角色open in new window默认被分为两类:管理员角色和业务角色,并默认添加了两个管理员角色:系统管理员二级单位管理员
角色的 AdminLevel-管理员级别open in new window 属性决定该角色是管理员角色(以及是哪级管理员角色),还是业务角色。 同时该属性也决定了管理员的分级深度:各角色中该属性的最大值就是管理员的最大分级。

权限open in new window默认无数据,按需去创建。
权限默认不能直接授给用户,即默认只可将权限授予角色,用户再通过角色拥有相应权限。可通过配置参数 AllowGrantPermissionsToUseropen in new window 更改。

系统管理员 可新增/修改业务角色,但不能维护权限数据。可对所有角色/权限进行授权操作。
下级管理员 则不能维护任何角色/权限数据,只能对自己权限范围内的角色/权限进行授权操作。

首页功能菜单

系统菜单open in new window快速链接open in new window用户菜单open in new window 均可设置为点击时打开一个页面,还是执行指定的 js 脚本,参见各自的 NavigateUrl 属性。
还可指定在什么目标打开页面:应用内标签、浏览器标签或弹出窗口。快速链接/用户菜单 通过 OpenIn 属性设置,系统菜单 则要通过其 AttributeDataTagopen in new window 属性设置。
快速链接/用户菜单 还提供了 InnerHTML 属性,可完全指定显示内容及样式。

可通过授权指定哪些菜单项对用户可见。

若快速链接和某一个系统菜单项指向同一页面,用户点击时将打开或激活同一个选项卡,不会打开两个选项卡。

新建各项目时,可以先不指定 NavigateUrl,系统会自动使用一个内置的空白页面,以方便初始化过程。

QuickAdmin.json 配置文件

可通过 json 文件对 QuickAdmin.Net 应用进行配置,无须再次编译,如应用的名称、Logo、一些功能的启用/停用等等。默认使用应用 configs 目录下的 QuickAdmin.json 文件。
QuickAdmin.Net 内置了一个进行参数配置的页面:QuickAdmin Settings(~/QAdmin/Setup/Settings),用来可视化修改并保存一些配置(并非所有配置项都可更改)。该页面仅超级管理员可用。

文件中包含两部分配置:公共配置和 RCL 配置,RCL 配置位于名为 "RCL" 的 Section 里,可配置项以及各项默认值请分别参考 QuickAdminSettingsopen in new window类 和 QuickAdminRCLSettingsopen in new window类 文档。
可在 QuickAdmin.json 文件里仅输入非默认配置项,如:

{
  "CookieNamePostfix": ".QHSE",
  "RCL": {
    "AppFullName": "QHSE",
    "AppShortName": "QHSE",
    "AppIcon": "img/logo.png",
    "GlobalCss": "QAdmin/Res/css/solidBlueButtons.css, css/site.css",
    "GlobalJs": "js/site.js",
    "AutoRegisterCRUDProxies": true,
    "NoDefaultIconOnInternalButtons": true,
    "LoginPage": {
      "EnableWeChatQRCodeLogin": true,
      "PageCss": "css/login.css",
      "PageJs": "js/login.js",
      "LogoImg": "img/logo.png",
      "FooterText": "© QHSE"
    },
    "IndexPage": {
      "PageCss": "css/index.css",
      "PageJs": "js/index.js",
      "SidebarLogoImg": "img/logo.png",
      "SidebarTitle": "QHSE",
      "HomeTab": {
        "TabTitle": "总览",
        "TabUrl": "Dashboard"
      }
    }
  }
}

在生产环境中,可将配置 json 放入嵌入资源中,此时配置将无法更改。

数据库配置

数据库配置类为 DBSettingsopen in new window 类,默认取自 appsettings.json 里的名为 "DB" 的 Section:

{
  "DB": {
    "Type": "Sqlite",
    "ConnectionString": "Data Source=./qadmindemo.db"
  }
}

Type 可为 "Sqlite"、"SqlServer"、"Oracle"、"MySql"、"PostgreSQL" 等等, 参见 FreeSql 的 DataType 枚举。除过 Sqlite,其它类型数据库需要先将数据库及用户账户建好。 MySql 数据库需要 v8.0+ (用到了 CTE 查询)。

登录页

QuickAdmin.Net 内置了两个不同布局的登录页 "~/Login" 和 "~/UserLogin",具体用哪一个由配置文件里的 "RCL:LoginPage:UseUserLoginPage" 配置项决定,对应属性为 UseUserLoginPageopen in new window。 可在示例项目里修改一下 UseUserLoginPage 配置查看效果。
内置登录页的全部配置项参考 LoginPageSettingsopen in new window 类。

可通过 PageCss/PageJs 配置给内置登录页加载自定义 css/js 文件,对页面元素进行调整,比如你要用自己的 Logo 图片或背景图片,此时可能需要调整一下相关元素的样式。

QuickAdmin.Net 还内置了用手机号+验证码登录以及微信扫码登录,默认未启用,也可使用自己的登录页面,如何实现参见下节说明。

默认页

QuickAdmin.Net 内置了 Index 页:"~/Index" 作为应用的默认页,该页面的可配置项参见 IndexPageSettingsopen in new window 类。
支持单选项卡或多选项卡模式,由配置文件里的 "RCL:IndexPage:SingleTabMode" 配置项决定,对应属性为 SingleTabModeopen in new window
可通过 "RCL:IndexPage:HomeTab:TabUrl" 配置项指定首页 Url,对应属性为 TabUrlopen in new window

可通过 PageCss/PageJs 配置加载自定义 css/js 文件,对页面元素进行调整或加入需要的 js 代码。当有 系统菜单/快速链接/用户菜单 指定为执行一个 js 函数时, 就需要通过 PageJs 配置把含有该函数的 js 文件加载进来。

也可使用自己默认页,如何实现参见下节说明。

手动同步表结构

系统内置了一个可用来手动同步表结构的页面:~/QAdmin/Setup/SyncStructure,可在该页面查看 CodeFirst 生成的 SQL、执行同步操作等等。
若系统连接了多个数据库,还可选取目标数据库。
SyncStructure

TIP

同步操作仅在开发环境下可用。
手动加载DLL功能用来在以下情形使用:实体是在某个程序集内定义的,但该程序集尚未被加载(例如自应用启动以来还没有使用程序集内的任何对象),其内定义的实体类型也就没有在此页面显示出来,这时手动加载一下该程序集并刷新页面即可。

通用 CRUD 配置文件

默认情况下,应用 configs 目录下的 crudProxy 目录及其子目录下的所有 .json 文件被认为是通用 CRUD 配置文件, 若配置项 AutoRegisterCRUDProxiesopen in new window 为 true,将在应用程序启动时将它们一一加载。
有关通用 CRUD 的开发与配置在后边章节详细说明。