Ejemplo n.º 1
0
        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
            //}
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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");
                });
            });
        }