public void Execute(PersistBrokerPluginContext context) { if (context.EntityName != "sys_entity") { return; } var broker = context.Broker; switch (context.Action) { case EntityAction.PostCreate: // 创建权限 new SysRolePrivilegeService(broker).CreateRoleMissingPrivilege(); // 重新注册权限并清除缓存 UserPrivilegesCache.Clear(broker); break; case EntityAction.PostDelete: var privileges = new SysRolePrivilegeService(broker).GetPrivileges(context.Entity.Id).ToArray(); broker.Delete(privileges); UserPrivilegesCache.Clear(broker); break; default: break; } }
/// <summary> /// 检查权限 /// </summary> /// <param name="objectid"></param> /// <param name="operationType"></param> /// <returns></returns> private static bool CheckAccess(string objectid, OperationType operationType, string userId) { var data = UserPrivilegesCache.GetUserPrivileges(string.IsNullOrEmpty(userId) ? UserIdentityUtil.GetCurrentUser()?.Id : userId) .Where(item => item.objectid == objectid) .FirstOrDefault(); return(data != null && (data.privilege & (int)operationType) == (int)operationType); }
public static IEnumerable <sys_menu> Filter(this IEnumerable <sys_menu> sysMenus) { var privileges = UserPrivilegesCache.GetUserPrivileges(UserIdentityUtil.GetCurrentUserId()).Where(item => item.object_type == nameof(sys_menu)); return(sysMenus.Where(item => { var data = privileges.FirstOrDefault(e => e.objectid == item.sys_menuId); return data != null && data.privilege > 0; })); }