系统管理指南

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

管理员说明

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

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

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

内置管理页面

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

~/QAdmin/xxx

页面 "~/QAdmin/Setup/BuiltInPageList" 列出了所有内置的系统管理相关 Razor 页面,并指出了各页面对哪些用户可用。
这里没有把各个内置页面的功能细节一一列出,请打开具体页面查看。关于各个数据项的说明,请到其对应实体的参考文档open in new window查阅。

基础数据初始化

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

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

TIP

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

组织机构与用户

组织机构open in new window可进行批量快速添加,具体见 组织机构管理 页面。

管理员在新增用户open in new window时,若不指定密码,新用户密码将是默认密码。 默认密码是 DefaultPasswordPrefix 配置open in new window 加上用户的 AccountIdopen in new window。 可通过重写 UserServiceopen in new windowGenerateDefaultPassword()open 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 属性,可完全指定显示内容及样式。
若快速链接和某一个系统菜单项指向同一页面,用户点击时将打开或激活同一个选项卡,不会打开两个选项卡。

QuickAdmin.json 配置文件

可通过 json 文件对 QuickAdmin.Net 应用进行配置,无须再次编译,如应用的名称、Logo、一些功能的启用/停用等等。默认使用应用 configs 目录下的 QuickAdmin.json 文件加载/保存配置。
该文件中包含两部分配置:公共配置和 RCL 配置,可配置项目请分别参考QuickAdminSettingsopen in new window类和QuickAdminRCLSettingsopen in new window类文档。
QuickAdmin.Net 也内置了一个进行参数配置的页面:QuickAdmin Settings 页,用来可视化修改并保存一些配置(并不是所有配置项都可更改)。该页面仅超级管理员可用。
在生产环境中,可将配置 json 放入嵌入资源中,此时配置项将无法更改。

以下为默认的配置 json:

{
  "AllowLoginWithMobileOrEmail": true,
  "EnableLoginCaptcha": true,
  "MaxPasswordRetryTimes": 5,
  "UserLockedDuration": 300,
  "BrowserAutoLoginMode": 1,
  "BrowserAutoLoginTokenExpireDays": 30,
  "BrowserHashValidationMode": 0,
  "AllowAdminResetUserPassword": true,
  "DefaultPasswordPrefix": null,
  "CacheUserRights": true,
  "AllowGrantPermissionsToUser": false,
  "SiteMenuItemAvailableByDefault": true,
  "EnableUserEmailVerification": false,
  "EnableUserMobileVerification": false,
  "AllowAdminModifyUserEmailAndMobile": true,
  "MobileRegexPattern": "^([1][3,4,5,6,7,8,9])\\d{9}$",
  "DefaultPagingSize": 20,
  "DiagnosticsLevel": 1,
  "IsClientSideDateTimeDisplayedAsServerTime": null,
  "CookieNamePostfix": null,
  "TempPath": null,
  "AppPathBase": null,
  "RCL": {
    "AppFullName": "QuickAdmin.Net",
    "AppShortName": "QuickAdmin.Net",
    "AppIcon": "QAdmin/Res/img/logoc.png",
    "GlobalCss": null,
    "GlobalJs": null,
    "EnableRequestBuffering": false,
    "CaptchaLength": 4,
    "CaptchaLetters": "123456789abdefhkmnprswxyABCDEFGHJKLMNPRSTWXY",
    "CaptchaNoiseLineCount": 6,
    "DefaultPageName": null,
    "LoginPageName": null,
    "CRUDProxyCfgDirectory": "configs/crudProxy",
    "AutoRegisterCRUDProxies": false,
    "ShowOpLogInUserAccountModule": false,
    "EnablePasswordExpiredHandler": true,
    "EnableLoginAPI": true,
    "EnableCaptchaAPI": true,
    "EnableWeChatMiniProgAPI": false,
    "NoDefaultIconOnInternalButtons": false,
    "DemoWeChatMiniProgAppId": null,
    "DemoWeChatMiniProgAppSecret": null,
    "LoginPage": {
      "Enabled": true,
      "UseUserLoginPage": false,
      "EnableWeChatQRCodeLogin": false,
      "PageCss": null,
      "PageJs": null,
      "LogoImg": "QAdmin/Res/img/logos.png",
      "FooterText": "© quickadmin.net"
    },
    "IndexPage": {
      "Enabled": true,
      "PageCss": null,
      "PageJs": null,
      "SidebarWidth": 250,
      "SidebarLogoImg": "QAdmin/Res/img/logos.png",
      "SidebarTitle": "QuickAdmin",
      "SidebarCollapsed": false,
      "MaxTabCount": 10,
      "SingleTabMode": false,
      "ExpandTreeNodeIndexes": null,
      "IgnoreIconsForEachTab": false,
      "CloseTabAfterOpenInNewWindow": false,
      "CacheOpenedWindows": false,
      "LoadingImg": null,
      "QuickLinkTextPosition": 4,
      "HomeTab": {
        "TabTitle": "首页",
        "TabUrl": null,
        "Closeable": false,
        "IconFont": "_Home",
        "Icon": null,
        "IconFontClass": null,
        "IconUrl": null
      }
    },
    "UserProfilePage": {
      "PageCss": null,
      "PageJs": null
    },
    "Buttons": null
  }
}

通用 CRUD 配置文件

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

数据库配置

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

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

Type 可为 "Sqlite"、"SqlServer"、"Oracle"、"MySql"、"PostgreSQL" 等等, 参见 FreeSql 的 DataType 枚举。

登录页

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

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

例如你要用户能够始终自动登录,不需要显示 "下次自动登录" 检查框,即:隐藏该检查框,且始终置为选中状态,像如下效果:
CreateTables
做法为:在应用 wwwroot/js 目录下新建一个名为 login.js 的 JS 文件,内容如下:

F.ready(function () {
  $('input.SavePassword').prop('checked', true);
  $('input.SavePassword').closest('.login-form4').hide();
  if (F('SavePassword')) {
    F('SavePassword').setValue(true);
    F('SavePassword').hide();
  }
  F.ui.outterPanel.doLayout();
});

然后配置 PageJs 项即可:

{
  ...
  "RCL": {
    ...
    "LoginPage": {
      ...
      "PageJs": "js/login.js",
      ...
    },
    ...
  }
}






 





TIP

F.ready() 为 FineUICore 的客户端对象函数,在使用了 FineUICore 的页面,要在页面加载完成时执行 JS 代码,通常要用 F.ready() 而不是 jQuery 的 ready() 方法。
登录页内还有一个隐藏的 "忘记密码" 链接,以及其它元素,也可通过 PageCss/PageJs 配置去显示或填充其它内容。

也可使用自己的登录页面,如何实现参见下节说明。

默认页

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

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