Пример #1
0
        public ActionResult Index()
        {
            var list = new List <Cache.Sys_MenuBasisCache.MenuBasisModel>();
            var menu = new Cache.Sys_MenuBasisCache().Get(Common.FormsTicket.SystemCode);

            var role  = new Cache.Sys_UserRoleCache().Get(Common.FormsTicket.UserId);
            var rMenu = new Cache.Sys_RoleMenuCache();
            var ids   = new List <long>();

            foreach (var item in role)
            {
                foreach (var rm in rMenu.Get(item.RoleId))
                {
                    ids.Add(rm.MenuId);
                }
            }
            foreach (var item in menu)
            {
                if (ids.FirstOrDefault(c => c == item.Id) > 0)
                {
                    list.Add(item);
                }
            }
            var u = new Provider.UserBasisProvider().GetUser(Common.FormsTicket.UserId);

            ViewBag.LastTime = u != null?u.LastTime.ToString("yyyy年MM月dd日") : "";

            ViewBag.MenuItem = list;
            var title = new Cache.SysSettingCache().Get(Common.FormsTicket.SystemCode);

            ViewBag.Title = title.SystemName == null ? "" : title.SystemName;
            return(View());
        }
Пример #2
0
        public ActionResult UserRole(long?UserId)
        {
            if (UserId == null || UserId == 0)
            {
                return(Content("请重新操作"));
            }
            var list = new List <Models.UserBasisModels.UserRoleModel>();
            var role = new Cache.Sys_RoleBasisCache().Get(Common.FormsTicket.SystemCode);
            var user = new Cache.Sys_UserRoleCache().Get(UserId.Value);

            foreach (var item in role)
            {
                var u = user.FirstOrDefault(c => c.RoleId == item.Id);
                list.Add(new Models.UserBasisModels.UserRoleModel
                {
                    RoleId   = item.Id,
                    RoleName = item.RoleName,
                    IsSelect = u != null,
                    Id       = u != null ? u.RoleUserId : 0
                });
            }
            ViewBag.UserId = UserId.Value;
            return(View(list));
        }
Пример #3
0
        /// <summary>
        /// 重写OnAuthorization
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            //Stopwatch st = new Stopwatch();
            //st.Start();
            var controllerName = (filterContext.RouteData.Values["controller"].ToString()).ToLower();
            var actionName     = (filterContext.RouteData.Values["action"].ToString()).ToLower();

            if (Common.FormsTicket.UserId == decimal.Zero)
            {
                var type = "/1";
                if ("Home".ToLower().Contains(controllerName))
                {
                    type = string.Empty;
                }
                filterContext.Result = new RedirectResult("~/Account/Logout" + type);
            }
            else
            {
                if (!"Home".ToLower().Contains(controllerName))
                {
                    actionName = string.IsNullOrEmpty(ActionName) ? actionName : ActionName.ToLower();
                    var IsChecked = false;
                    //TODO:返回结果需要重新赋值一个对象不然会引发System.NullReferenceException: 未将对象引用设置到对象的实例。

                    var menuId = new Cache.Sys_MenuBasisCache().Get(Common.FormsTicket.SystemCode).FirstOrDefault(a => a.ControllerName.ToLower() == controllerName);
                    if (menuId != null)
                    {
                        var id        = menuId.Id;//这里不重新定义 menuId 会引发System.NullReferenceException: 未将对象引用设置到对象的实例。 因为下文有对象使用
                        var operateId = (from a in new Cache.Sys_MenuOperateCache().Get(id)
                                         where a.OperateCode.ToLower() == actionName
                                         select a.Id).FirstOrDefault();

                        var UserRole = new Cache.Sys_UserRoleCache().Get(Common.FormsTicket.UserId);

                        var  roleMenu    = new Cache.Sys_RoleMenuCache();
                        var  roleOperate = new Cache.Sys_RoleOperateCache();
                        bool menuChecked = false;
                        foreach (var item in UserRole)
                        {
                            var menu = roleMenu.Get(item.RoleId).FirstOrDefault(c => c.MenuId == id);
                            if (menu != null && !menuChecked)
                            {
                                //存在菜单权限
                                menuChecked = true;
                            }
                            if (menuChecked)
                            {
                                if (actionName == "index")
                                {
                                    //默认权限,有菜单权限都能访问index
                                    IsChecked = true;
                                    break;
                                }
                                var operate = roleOperate.Get(item.RoleId).FirstOrDefault(c => c.OperateId == operateId);
                                if (operate != null)
                                {
                                    //存在按钮权限,跳出循环
                                    IsChecked = true;
                                    break;
                                }
                            }
                        }
                    }
                    if (!IsChecked)
                    {
                        filterContext.HttpContext.Response.Write("没有权限访问该页面");
                        filterContext.HttpContext.Response.End();
                        filterContext.HttpContext.Response.StatusCode = 401;//定义状态后就不会在往下执行了
                    }
                }
            }
            //st.Stop();
            //Common.LogHelper.WriteLog(typeof(UserAuthorize),st.ElapsedMilliseconds.ToString());
        }