public ActionResult Index() { string currentUserId = User.Identity.GetUserId(); // ApplicationUser user = db.Users.FirstOrDefault(x => x.Id == currentUserId); ApplicationUser user = db.Users.Include(i => i.Roles).FirstOrDefault(i => i.Id == currentUserId); ViewBag.trueName = user.TrueName; var username = user.UserName; var uml = new UserMenuList(); var ump = new UserMenuList(); if (username == "admin") //如果是管理员,则加载所有菜单 { uml.Menus = db.Menus.ToList(); } else { var user_roles = user.Roles.ToList(); var rolesid = user_roles.Select(c => c.RoleId).ToList(); //db.Menus.Include(i=>i.ApplicationRoles).Where(i=>i.ApplicationRoles.id) var role = db.Roles.Include(i => i.Menus).Where(i => rolesid.Contains(i.Id)).ToList(); foreach (var r in role) { if (uml.Menus == null) { uml.Menus = r.Menus.ToList(); } else { uml.Menus = uml.Menus.Union(r.Menus.ToList()); } } } if (uml.Menus != null) { var rootMenu = uml.Menus.FirstOrDefault(i => i.menuType == "根模块"); if (rootMenu != null) { var rootMenuId = rootMenu.ID; var catalogMenu = uml.Menus.Where(i => i.parentId == rootMenuId && i.isMenu == "是"); //非菜单模块不加载 var UserMenuPackages = (from r in catalogMenu select new UserMenuPackage { menuName = r.menuName, menuType = r.menuType, menuOrder = r.menuOrder, menuIcon = r.menuIcon, Menus = uml.Menus.Where(i => i.parentId == r.ID).OrderByDescending(a => a.menuOrder) }).OrderByDescending(c => c.menuOrder); ump.UserMenuPackages = UserMenuPackages.ToList(); } } return(View(ump)); }
int notAuthentication = 1; //设置未认证标志,用于区分返回不同的未认证页面 public void OnAuthentication(AuthenticationContext context) { int caresult = 0; string currentUserName = context.HttpContext.User.Identity.GetUserName(); if (context.HttpContext.User.Identity.IsAuthenticated && currentUserName != "admin" && !(context.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true) || context.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true))) //认证,并且用户名不等于admin及未设置Anonymous的用户执行下面代码 { notAuthentication = 0; //设置已登录标志 var uml = new UserMenuList(); uml = (UserMenuList)context.HttpContext.Session["uml"]; var currentController = context.RouteData.Values["controller"].ToString(); var currentAction = context.RouteData.Values["action"].ToString(); if (uml.Menus != null) { //var tt = uml.Menus.Where(i => i.menuController.ToString() == currentController && i.menuAction == currentAction).ToList(); uml.Menus = uml.Menus.ToList(); foreach (var m in uml.Menus) { if (!(String.IsNullOrEmpty(m.menuAction) || String.IsNullOrEmpty(m.menuController))) { if (m.menuController.ToUpper() == currentController.ToUpper() && m.menuAction.ToUpper() == currentAction.ToUpper()) { caresult = 1; break; } } } } } if ((context.HttpContext.User.Identity.IsAuthenticated && caresult == 1) || context.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true) || context.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true) || currentUserName == "admin") { // 已登录,并且查询数据库后具有操作权限或者设置了Anonymouse,以及当前用户是admin } else { context.Result = new HttpUnauthorizedResult(); // mark unauthorized } //if (context.HttpContext.User.Identity.IsAuthenticated && //(context.HttpContext.User.IsInRole(superAdminRole) //|| context.HttpContext.User.IsInRole(adminRole))||(context.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true)|| context.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true))) //{ // // do nothing //} //else //{ // context.Result = new HttpUnauthorizedResult(); // mark unauthorized //} }
public async Task <ActionResult> Login(LoginViewModel model, string returnUrl) { if (ModelState.IsValid) { var user = await UserManager.FindAsync(model.UserName, model.Password); if (user != null) { await SignInAsync(user, model.RememberMe); //以下代码将权限保存到Session //string currentUserId = User.Identity.GetUserId(); //此处无法获取到id,除非再次对服务器请求 ApplicationUser current_user = db.Users.Include(i => i.Roles).FirstOrDefault(i => i.UserName == model.UserName); HttpContext.Session["UserName"] = current_user.UserName; var user_roles = current_user.Roles.ToList(); var rolesid = user_roles.Select(c => c.RoleId).ToList(); var role = db.Roles.Include(i => i.Menus).Where(i => rolesid.Contains(i.Id)).ToList(); var uml = new UserMenuList(); foreach (var r in role) { if (uml.Menus == null) { uml.Menus = r.Menus.ToList(); } else { uml.Menus = uml.Menus.Union(r.Menus.ToList()); } } HttpContext.Session["uml"] = uml; //将当前用户的权限保存到session //保存权限结束 return(RedirectToLocal(returnUrl)); } else { ModelState.AddModelError("", "Invalid username or password."); //ModelState.AddModelError("", "用户名或密码错误。(初始默认密码:abc123)"); } } // 如果我们进行到这一步时某个地方出错,则重新显示表单 return(View(model)); }
private void InitialUserMenuList() { MenuItemEntity childMenuItemEntity = new MenuItemEntity(); childMenuItemEntity.id = Convert.ToInt32(2); childMenuItemEntity.code = "PasswordSettings"; childMenuItemEntity.name = "修改密码"; MenuItemEntity childMenuItemEntity1 = new MenuItemEntity(); childMenuItemEntity1.id = Convert.ToInt32(1); childMenuItemEntity1.code = "PersonalInfo"; childMenuItemEntity1.name = "修改资料"; MenuItemEntity menuItemEntity = new MenuItemEntity(); menuItemEntity.id = Convert.ToInt32(0); menuItemEntity.code = "currentUser"; menuItemEntity.name = "管理员"; menuItemEntity.children.Add(childMenuItemEntity); menuItemEntity.children.Add(childMenuItemEntity1); UserMenuList.Add(menuItemEntity); RaisePropertyChanged("UserMenuList"); Application.Current.Dispatcher.Invoke(() => { //获取菜单 _menuService.GetMenu <MenuEntity>((ret) => { if (ret.state.code != StateCodeEnum.Success) { LogHelper.Error(ret.state.msg); } (ret as MenuEntity).menus.ForEach(p => { p.SetUpdateNotify(UpdateMenuItemHeight); MenuList.Add(p); }); this.MenuList = MenuList; RaisePropertyChanged("MenuList"); }); }); }