flowchart LR A[UniqueNO<br/>NName=tree] -->|取 No 作为 NodeID| B[Tree.NodeID] B --> C[listTreeForPermission<br/>返回 id=NodeID] C --> D[zTree id / pId<br/>树结构展示]
flowchart LR A[分配 NodeID] --> B[插入 ObjectRegister<br/>ObjectID=MAX+1] B --> C[Tree.ObjectID = ObjectID] C --> D[listTreeForPermission<br/>返回 objectId] D --> E[前端勾选提交 objectIds] E --> F[STPermission 写入]
勾选 MES 节点时把 sysMenuId 加入 permissionMesMenuIds;取消勾选时清理对应按钮态。
7.3 保存
savePermission 收集并提交:
收集方法
字段
collectPermissionObjectIds()
objectIds(勾选节点的 objectId,不是 id)
collectMesMenuIdsForSave()
mesMenuIds
collectMesButtonMenuIdsForSave()
mesButtonMenuIds
collectOperationPermissionsForSave()
operationPermissions
collectOperationReplaceObjectIdsForSave()
operationReplaceObjectIds
连同 roleIds、mode 一并 POST 到 /eosrole/permission/save。
8. 验证 SQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-- NodeID 与 ObjectID 对照 SELECT t.NodeID, RTRIM(t.NodeCaption) AS MenuCaption, t.ParentID, t.ObjectID AS TreeObjectID, o.ObjectID AS RegObjectID, o.TypeID, o.OwnerID FROM messys.dbo.Tree t LEFTJOIN messys.dbo.ObjectRegister o ON o.OwnerID = t.NodeID ORDERBY t.NodeID;
-- UniqueNO 当前序列 SELECT NName, NoFROM messys.dbo.UniqueNO WHERE NName ='tree';
SELECT r.OID AS RoleOID, r.UserName AS RoleName, p.ObjectID, o.[Object] AS ObjectName, o.TypeID, t.NodeID, RTRIM(t.NodeCaption) AS MenuCaption, p.Oprate, p.Permission FROM mesdata.dbo.STUsers r JOIN mesdata.dbo.STPermission p ON p.UserID = r.OID JOIN messys.dbo.ObjectRegister o ON p.ObjectID = o.ObjectID LEFTJOIN messys.dbo.Tree t ON o.OwnerID = t.NodeID WHERE r.OID =@RoleOID AND r.uGroup =1 AND o.TypeID =7-- 菜单/目录 ORDERBY t.NodeID, p.Oprate;
SELECT u.UserName AS UserName, r.UserName AS RoleName, RTRIM(t.NodeCaption) AS MenuCaption, p.Oprate, p.Permission FROM mesdata.dbo.STUsers u JOIN mesdata.dbo.STUserGroup ug ON ug.UserID = u.OID JOIN mesdata.dbo.STUsers r ON ug.GroupID = r.OID AND r.uGroup =1 JOIN mesdata.dbo.STPermission p ON p.UserID = r.OID JOIN messys.dbo.ObjectRegister o ON p.ObjectID = o.ObjectID AND o.TypeID =7 JOIN messys.dbo.Tree t ON o.OwnerID = t.NodeID WHERE u.OID =@UserOID AND u.uGroup =0 AND p.Oprate = N'执行'-- 菜单可见通常对应「执行」 ORDERBY r.UserName, t.NodeID;
4.3 统计各角色的菜单授权数量
1 2 3 4 5 6 7 8 9 10 11
SELECT r.OID, r.UserName AS RoleName, COUNT(DISTINCT p.ObjectID) AS MenuObjectCount, COUNT(*) AS PermissionRowCount FROM mesdata.dbo.STUsers r JOIN mesdata.dbo.STPermission p ON p.UserID = r.OID JOIN messys.dbo.ObjectRegister o ON p.ObjectID = o.ObjectID AND o.TypeID =7 WHERE r.uGroup =1 GROUPBY r.OID, r.UserName ORDERBY MenuObjectCount DESC;
SELECTDISTINCT r.OID, r.UserName AS RoleName, RTRIM(t.NodeCaption) AS MenuCaption, p.Oprate FROM messys.dbo.Tree t JOIN messys.dbo.ObjectRegister o ON o.OwnerID = t.NodeID AND o.TypeID =7 JOIN mesdata.dbo.STPermission p ON p.ObjectID = o.ObjectID JOIN mesdata.dbo.STUsers r ON p.UserID = r.OID AND r.uGroup =1 WHERE t.NodeID =@MenuNodeID ORDERBY r.UserName, p.Oprate;
4.5 对比 EOS 角色与 MES 角色(不含菜单)
1 2 3 4 5 6 7 8 9 10 11
SELECT sr.role_id, sr.role_name AS MesRoleName, sr.eos_role_id, er.UserName AS EosRoleName, er.OID AS EosRoleOID FROM mesdata.dbo.sys_role sr LEFTJOIN mesdata.dbo.STUsers er ON sr.eos_role_id = er.OID AND er.uGroup =1 WHERE sr.eos_role_id ISNOTNULL ORDERBY sr.role_id;
4.6 检查菜单节点是否已在 ObjectRegister 注册
1 2 3 4 5 6 7 8 9
SELECT t.NodeID, RTRIM(t.NodeCaption) AS MenuCaption, t.ObjectID, o.ObjectID AS RegObjectID, o.TypeID FROM messys.dbo.Tree t LEFTJOIN messys.dbo.ObjectRegister o ON o.OwnerID = t.NodeID ORDERBY t.NodeID;