Пример #1
0
        /// <summary>
        /// 判断某菜单是否有权限访问
        /// </summary>
        /// <param name="menu">菜单项</param>
        /// <param name="menus">所有系统菜单</param>
        /// <returns>true代表可以访问,false代表不能访问</returns>
        public bool IsAccessable(FrameworkMenu menu, List <FrameworkMenu> menus)
        {
            //寻找当前菜单的页面权限
            var find = FunctionPrivileges.Where(x => x.MenuItemId == menu.ID && x.Allowed == true).FirstOrDefault();

            //如果能找到直接对应的页面权限
            if (find != null)
            {
                return(true);
            }
            return(false);
        }
Пример #2
0
        /// <summary>
        /// 判断某菜单是否有权限访问
        /// </summary>
        /// <param name="menu">菜单项</param>
        /// <param name="menus">所有系统菜单</param>
        /// <returns>true代表可以访问,false代表不能访问</returns>
        public bool IsAccessable(FrameworkMenu menu, List <FrameworkMenu> menus)
        {
            //寻找当前菜单的页面权限
            var find = FunctionPrivileges.Where(x => x.MenuItemId == menu.ID).ToList();

            //如果能找到直接对应的页面权限
            if (find.Count > 0)
            {
                //检查是否有拒绝访问的设定,如果有则直接返回false
                var deny = find.Where(x => x.Allowed == false && x.UserId != null).FirstOrDefault();
                if (deny != null)
                {
                    return(false);
                }
                else
                {
                    //检查是否有允许访问的设定,如果有则直接返回true
                    var allow = find.Where(x => x.Allowed == true && x.UserId != null).FirstOrDefault();
                    if (allow != null)
                    {
                        return(true);
                    }
                    else
                    {
                        //如果用户没有指定任何页面权限,则检查用户所属角色中是否有拒绝访问的设定,如果有则返回false
                        var roleDeny = find.Where(x => x.Allowed == false && x.RoleId != null).FirstOrDefault();
                        if (roleDeny != null)
                        {
                            return(false);
                        }
                        //如果没有则返回true,因为find里面有值,但前三种情况都没有,则肯定是允许角色访问是有的,所以不再做判断了
                        else
                        {
                            return(true);
                        }
                    }
                }
            }
            //如果没有直接对应的,且如果当前menu设定了继承属性,则递归寻找上层菜单是否可以访问
            else
            {
                if (menu.Parent == null)
                {
                    return(false);
                }
                else
                {
                    return(IsAccessable(menu.Parent, menus));
                }
            }
        }