# 管理员菜单维护
V8.1开始,标准产品对组织机构做了调整:全面开启了三元分离和三员角色化,在代码层面会有很大调整,详见如下信息。
# 需要修改
# AppContext.isXxxxAdmin
将旧版本左侧的代码用右侧写法替代:
AppContext.isGroupAdmin()==> orgHelper.isLoginGroupAdminRole()
AppContext.isAdministrator()==> orgHelper.isLoginUnitAdminRole()
AppContext.isAuditAdmin()==> orgHelper.isLoginGroupAdminRole()
AppContext.isSystemAdmin()==> orgHelper.isLoginGroupAdminRole()
# User.isXxxAdmin
将旧版本左侧的代码用右侧写法替代:
r.isGroupAdmin() ==> orgHelper.isLoginGroupAdminRole()
r.isAdministrator()==> orgHelper.isLoginUnitAdminRole()
r.isAuditAdmin() ==> orgHelper.isLoginGroupAdminRole()
r.isSystemAdmin() ==> orgHelper.isLoginGroupAdminRole()
# orgManager.getXxxx
将旧版本左侧的代码用右侧写法替代:
getSystemAdmin() ==> findSystemAdmin()
getAuditAdmin() ==> findAuditAdmin()
getGroupAdmin() ==> findGroupAdmin()
getAdministrator() ==> findAdministrator()
# 角色化管理员适配示例
由于角色化,系统管理员的菜单从原来固定的角色,变为多种组合,以前通过角色判断的是否具有某个菜单资源的方式不再合适。所以一般建议改为使用资源code判断权限。适配需要修改的点:
1、菜单配置文件。
2、修改@CheckRoleAccess
配置。
3、修改原有的集团管理员、单位管理员区分逻辑。
4、验证业务功能。
# 菜单配置文件
ctp-organization\src\main\webapp\WEB-INF\cfgHome\metadata
metadata
├─ entRoleStd
│ ├─ menu-AccountAdministrator-A6.xml //A6:单位管理员(原admin1账号)
│ ├─ menu-AccountAdministrator-A6C.xml //A6C:单位管理员(原admin1账号)
│ ├─ menu-AccountAdministrator-Enterprise.xml //A8-1:单位管理员(原admin1账号)
│ ├─ menu-AccountAdministrator.xml //系统管理员(原system账号)
│ ├─ menu-AuditAdmin.xml //审计管理员(原audit-admin账号)
│ ├─ menu-GroupAdmin.xml //集团管理员(原group-admin账号)
│ └─ menu-SystemAdmin.xml //系统管理员(原system账号)
├─ govRoleStd
│ ├─ menu-GroupAuditAdmin.xml //三员-系统级-审计管理员
│ ├─ menu-GroupSecretAdmin.xml //三员-系统级-安全管理员
│ ├─ menu-GroupSystemAdmin.xml //三员-系统级-系统管理员
│ ├─ menu-UnitAuditAdmin.xml ///三员-单位-审计管理员
│ ├─ menu-UnitSecretAdmin.xml //三员-单位-安全管理员
│ ├─ menu-UnitSystemAdmin-A6.xml //A6:三员-单位-系统管理员
│ ├─ menu-UnitSystemAdmin-A6C.xml //A6c:三员-单位-系统管理员
│ ├─ menu-UnitSystemAdmin-Enterprise.xml //A8-1:三员-单位-系统管理员
│ └─ menu-UnitSystemAdmin.xml //A8-2:三员-单位-系统管理员
├─ menu-SystemInitAdmin.xml //初始化管理员
# 配置文件说明
菜单配置文件包含两个部分菜单部分、资源code部分。
1、菜单部分用于配置系统管理员菜单入口、命名、图标等信息
2、资源code部分用于配置当前对应的管理员,没有菜单入口但是又要访问的资源code.
<?xml version="1.0" encoding="UTF-8"?>
<GroupAdmin>
<!-- 菜单配置 -->
<menus>
<menu code="org_workscope_setting" sort="9" name="system.menuname.AccessLevelConfig" desc="工作范围管理" icon="icon-gongzuofanweiguanli" target="mainfrm" plugin="" url="/organization/workscopeController.do?method=showWorkscopeframe" ></menu>
</menus>
<!--配置有权限的资源code-->
<virtualCode>
<code>system_back_admin</code>
</virtualCode>
</GroupAdmin>
下边我以组织机构_工作范围管理_、_特殊账号管理_适配过程为例,来说明怎么适配角色化后权限控制。
# 工作范围管理
1、为菜单定义资源code,命名建议{模块}_{子模块}_{功能},如果org_workscope_setting
表示组织机构工作范围管理
// 修改前
<menu code="" sort="9" name="system.menuname.AccessLevelConfig" desc="工作范围管理" icon="icon-gongzuofanweiguanli" target="mainfrm" plugin="" url="/organization/workscopeController.do?method=showWorkscopeframe" ></menu>
// 修改后
<menu code="org_workscope_setting" sort="9" name="system.menuname.AccessLevelConfig" desc="工作范围管理" icon="icon-gongzuofanweiguanli" target="mainfrm" plugin="" url="/organization/workscopeController.do?method=showWorkscopeframe" ></menu>
2、修改后端@CheckRoleAccess
配置
// 修改前
@CheckRoleAccess(roleTypes={Role_NAME.GroupAdmin,Role_NAME.AccountAdministrator,Role_NAME.HrAdmin})
public class WorkscopeController extends BaseController {
}
//修改后,将角色判断去掉,添加:resourceCode = "org_workscope_setting"
@CheckRoleAccess(roleTypes={Role_NAME.HrAdmin},resourceCode = "org_workscope_setting")
public class WorkscopeController extends BaseController {
}
# 特殊账号管理
1、菜单code定义
// 修改前
<menu code="" sort="7" name="system.menuname.Guest.special.accountManagement" desc="特殊账号管理" icon="icon-teshuzhanghaoguanli" target="mainfrm" plugin="vPortalAdvanced" url="/organization/guestController.do?method=showGuestframe" ></menu>
// 修改后
<menu code="org_gust_setting" sort="7" name="system.menuname.Guest.special.accountManagement" desc="特殊账号管理" icon="icon-teshuzhanghaoguanli" target="mainfrm" plugin="vPortalAdvanced" url="/organization/guestController.do?method=showGuestframe" ></menu>
2、修改@CheckRoleAccess
// 修改前
@CheckRoleAccess(roleTypes={Role_NAME.GroupAdmin,Role_NAME.AccountAdministrator})
public class GuestController extends BaseController {
}
//修改后,将角色判断去掉,添加:resourceCode = "org_workscope_setting"
@CheckRoleAccess(resourceCode = "org_gust_setting")
public class GuestController extends BaseController {
}
3、集团管理员与单位管理员区隔适配
// 修改前
public ModelAndView showGuestframe(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView("apps/organization/guest/guestHome");
User user = AppContext.getCurrentUser();
boolean isGroupVer = (Boolean) (SysFlag.sys_isGroupVer.getFlag());
mav.addObject("isGroupVer", isGroupVer);
mav.addObject("isGroupAdmin", OrgHelper.isGroupAdmin());// 前端需要缺乏是集团管理员or 单位管理员
mav.addObject("isAdministrator", OrgHelper.isAdministrator());// 前端需要缺乏是集团管理员or 单位管理员
return mav;
}
// 修改后
public ModelAndView showGuestframe(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView("apps/organization/guest/guestHome");
User user = AppContext.getCurrentUser();
boolean isGroupVer = (Boolean) (SysFlag.sys_isGroupVer.getFlag());
mav.addObject("isGroupVer", isGroupVer);
mav.addObject("isLoginGroupAdminRole", OrgHelper.isLoginGroupAdminRole());// 改为判断当前用户是否为集团的管理角色
mav.addObject("isLoginUnitAdminRole", OrgHelper.isLoginUnitAdminRole());// 改为判断当前用户是否为单位的管理角色
return mav;
}
# 废弃的组织机构变量
安全起见,以下变量废弃:
/**
* 系统管理员预置ID
* @deprecated 角色角色化后,废弃不再使用
*/
public static final Long SYSTEM_ADMIN_ID = -72730320***L;
/**
* 审计管理员预置ID
* @deprecated 角色角色化后,废弃不再使用,8.1后可能删除
*/
public static final Long AUDIT_ADMIN_ID = -44016066***L;
/**
* 集团管理员预置ID
* @deprecated 角色角色化后,废弃不再使用,8.1后可能删除
*/
public static final Long GROUP_ADMIN_ID = 5725175934***L;
编撰人:admin
快速跳转
← 登录验证码清晰度调整 修复流程图数据 →
