QSecurity 是 QPlugins 的付费插件,用于提供用户权限管理和控制。该插件实现的主要功能包括:
1、用户管理功能
- 角色管理
- 角色管理
- 添加子角色
- 删除子角色
- 添加引用(这里的引用是指将同一个角色或用户账号创建一个引用到其它角色下的工作方式,也就是说一个用户或角色同时隶属多个父角色,这样用户可以从多个父角色继承权限)
- 删除引用
- 系统管理员和来宾角色支持
- 角色授权管理
- 为角色单独授权(允许或拒绝)
- 从父角色继承权限
- 角色管理
- 用户账号管理
- 添加、删除账号
- 账号授权管理
- 为账号单独授权(允许或拒绝)
- 从父角色继承权限
- 系统管理员和来宾账号支持
2、权限管理
- 支持默认权限
- 在未有明确授权时,返回默认权限
- 在有多个父角色时,如果继承下来的权限有冲突时,返回默认权限
- 支持权限依赖
- 权限允许时,被依赖的权限自动授权
- 权限禁止时,被依赖的权限保持原样不变
- 支持权限继承
- 允许或禁止父权限自动修改所有的子权限
- 确定子权限时,如果子权限未明确定义则直接返回父权限定义
- 通过减少权限继承,可以明显减少权限数据存贮数量
3、访问限制
- IP 访问限制支持
- IP 地址限制
- IP 段限制
- 时段限制支持
- 支持允许或拒绝在特定的时间段登录
- 多重登录支持
- 允许指定的账号同时登录多个账号
4、数据存贮
- 使用IQSecurityStorage 接口,将数据存贮到不同的数据源,并从不同的数据源加载相关数据
【使用】
1、插件加载
- 如果是源码版本,可以直接将 qsecurity.pas 引用加入到工程中即可,它会自动注册自身到插件管理器,服务路径为:/Services/Security/QSecurity。
- 如果是DLL版本,qsecurity 仅提供的接口的定义,所以您先注册 DLL 加载器。然后加载插件。不过您需要在所有插件加载完成以后,才能去注册权限,所以你需要响应插件引擎的 NID_LOADERS_STARTED 通知来注册权限,以及完成登录。
2、权限注册
注册权限时,首先您需要预定义相应权限的 GUID 编码,每个编码用于唯一对应一组或一项权限,然后在注册的过程中,将相应的权限层级注册完成。
with (PluginsManager as IQSecurityService).RootRight do begin Add(SID_LOGIN,'Login','是否允许用户登录'); with Add(SID_ATTACH,'Attach','信息登记') do begin ARight:=Add(SID_ATTACH_VIEW,'View','查看档案内容'); Add(SID_ATTACH_PRINT,'Print','打印档案').AddDepend(ARight); Add(SID_ATTACH_ATTACH,'Attach','新增档案内容').AddDepend(ARight); Add(SID_ATTACH_EDIT,'Delete','删除档案mwpw').AddDepend(ARight); end; end;
4、加载角色及用户权限信息(非必需)。
5、用户登录后,设置 (PluginsManager as IQSecurityService).CurrentUser ,然后通过用户及其所隶属 角色的Grant和Deny接口绑定授权。
6、在需要确定权限的位置,调用 PluginsManager.CanAccess 来确定对象的权限。