系统管理与配置

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

管理员说明

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

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

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

内置管理页面

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

~/QAdmin/xxx

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

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

基础数据初始化

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

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

TIP

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

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

组织机构与用户

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

~/QAdmin/Dept/List

和树形式页面:

~/QAdmin/Dept/TreeModeList

可自行决定在系统菜单里添加哪一个供管理员使用。页内均提供了批量快速添加等等功能。
部门实体的部门类型属性open in new window和经纬度属性(Lonopen in new window/Latopen in new window)默认未启用, 可通过重写 DeptServiceopen in new windowGetAvailableDeptTypesAsync()open in new windowEnableLonLatopen in new window 来启用。

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

用户的学历、职务、职称将分别从 UserServiceEducationsopen in new windowJobTitlesopen in new windowProfessionalTitlesopen 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 属性,可完全指定显示内容及样式。

快速链接可通过QuickLinkTextPosition 配置open in new window来指示是否显示文本以及文本显示在图标的哪个位置, 其它相关配置有: QuickLinkLeftRightMarginopen in new windowIsQuickLinkFixHeightopen in new window、 。

QuickAdmin.Net 内部可自动识别 CssClass 为指定值的用户菜单,参见其CssClass 属性open in new window说明。
用户菜单还支持 CheckBox 菜单项,相关属性有: RenderAsCheckBoxopen in new windowCheckBoxGroupNameopen in new windowCheckBoxHandleropen in new windowAttributeDataTagopen in new window

可通过授权指定哪些 系统菜单/快速链接 对用户可见。

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

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

字典管理

QuickAdmin.Net 内置字典管理功能,采用了两级字典表结构:SysDictTypeopen in new windowSysDictItemopen in new window
SysDictType 存储字典类型,即都有哪些字典。
SysDictItem 里则存储具体字典的各个项目。SysDictItem 设计有 Value/Name 字段,你可自由组合字典项,比如只用 ValueValue/Name 成对,或者 Value/Id 成对。

对应的管理页面分别为:
~/QAdmin/Common/EntityCRUD/List/QuickAdmin.Entity.SysDictType/1/1

~/QAdmin/Common/EntityCRUD/List/QuickAdmin.Entity.SysDictItem/1/1
这两个页面对 超级管理员根机构管理员 可用,页内均提供了批量快速添加功能。它们是用内置的通用 CRUD 功能实现的,并无实际页面文件。

同时提供了对应的服务来获取字典项目:IDictItemServiceopen in new window 的各个 GetAvailableXXX() 方法。
以及 UI 扩展,如:ExtLoadSysDictItemsByValueopen in new window/ExtLoadSysDictItemsByNameAndValueopen in new window, 只需一个方法即可自动填充下拉框控件。

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 文件加载进来。

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

手动同步表结构

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

TIP

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

通用 CRUD 配置文件

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