NFine中权限判断出错的问题

Posted wangbg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NFine中权限判断出错的问题相关的知识,希望对你有一定的参考价值。

问题描述:登录后点击栏目一,弹出了窗口一,再点击栏目二,弹出了窗口二,然后再点击窗口一,再执行窗口一中的操作时,发现已没有任何权限,调试后发现在HandlerAuthorizeAttribute这个类中

        private bool ActionAuthorize(ActionExecutingContext filterContext)
        {
            var operatorProvider = OperatorProvider.Provider.GetCurrent();
            var roleId = operatorProvider.RoleId;
            var moduleId = WebHelper.GetCookie("nfine_currentmoduleid");
            var action = HttpContext.Current.Request.ServerVariables["SCRIPT_NAME"].ToString();
            return new RoleAuthorizeApp().ActionValidate(roleId, moduleId, action);
        }

moduleId这个值取的不对,又转到前台indextab.js中

        addTab: function () {
            $("#header-nav>ul>li.open").removeClass("open");
            var dataId = $(this).attr(‘data-id‘);
            if (dataId != "") {
                top.$.cookie(‘nfine_currentmoduleid‘, dataId, { path: "/" });
            }
            var dataUrl = $(this).attr(‘href‘);
            var menuName = $.trim($(this).text());
            var flag = true;

发现在这里对cookie(‘nfine_currentmoduleid‘)赋值,接着查看点击窗口选项卡的事件

        activeTab: function () {
            var currentId = $(this).data(‘id‘);
            if (!$(this).hasClass(‘active‘)) {
                $(‘.mainContent .NFine_iframe‘).each(function () {
                    if ($(this).data(‘id‘) == currentId) {
                        $(this).show().siblings(‘.NFine_iframe‘).hide();
                        return false;
                    }
                });
                $(this).addClass(‘active‘).siblings(‘.menuTab‘).removeClass(‘active‘);
                $.nfinetab.scrollToTab(this);
            }
        },

发现并没有对cookie的赋值操作,所以找到了问题所在,但是如何传递该参数,尝试后的解决办法是回到addTab方法中

        addTab: function () {
            $("#header-nav>ul>li.open").removeClass("open");
            var dataId = $(this).attr(‘data-id‘);
            if (dataId != "") {
                top.$.cookie(‘nfine_currentmoduleid‘, dataId, { path: "/" });
            }
            var dataUrl = $(this).attr(‘href‘);
            var menuName = $.trim($(this).text());
            var flag = true;
            if (dataUrl == undefined || $.trim(dataUrl).length == 0) {
                return false;
            }
            $(‘.menuTab‘).each(function () {
                if ($(this).data(‘id‘) == dataUrl) {
                    if (!$(this).hasClass(‘active‘)) {
                        $(this).addClass(‘active‘).siblings(‘.menuTab‘).removeClass(‘active‘);
                        $.nfinetab.scrollToTab(this);
                        $(‘.mainContent .NFine_iframe‘).each(function () {
                            if ($(this).data(‘id‘) == dataUrl) {
                                $(this).show().siblings(‘.NFine_iframe‘).hide();
                                return false;
                            }
                        });
                    }
                    flag = false;
                    return false;
                }
            });
            if (flag) {
                var str = ‘<a href="javascript:;" class="active menuTab" data-id="‘ + dataUrl + ‘" data-realid="‘ + dataId + ‘">‘ + menuName + ‘ <i class="fa fa-remove"></i></a>‘;
                $(‘.menuTab‘).removeClass(‘active‘);
                var str1 = ‘<iframe class="NFine_iframe" id="iframe‘ + dataId + ‘" name="iframe‘ + dataId + ‘"  width="100%" height="100%" src="‘ + dataUrl + ‘" frameborder="0" data-id="‘ + dataUrl + ‘" seamless></iframe>‘;
                $(‘.mainContent‘).find(‘iframe.NFine_iframe‘).hide();
                $(‘.mainContent‘).append(str1);
                $.loading(true);
                $(‘.mainContent iframe:visible‘).load(function () {
                    $.loading(false);
                });
                $(‘.menuTabs .page-tabs-content‘).append(str);
                $.nfinetab.scrollToTab($(‘.menuTab.active‘));
            }
            return false;
        },

在新建Tab的时候,增加一个参数 data-realid,再回到激活事件中,直接为cookie赋值就大功告成了。

        activeTab: function () {
            var currentId = $(this).data(‘id‘);
            if (!$(this).hasClass(‘active‘)) {
                top.$.cookie(‘nfine_currentmoduleid‘, $(this).data(‘realid‘), { path: "/" });
                $(‘.mainContent .NFine_iframe‘).each(function () {
                    if ($(this).data(‘id‘) == currentId) {
                        $(this).show().siblings(‘.NFine_iframe‘).hide();
                        return false;
                    }
                });
                $(this).addClass(‘active‘).siblings(‘.menuTab‘).removeClass(‘active‘);
                $.nfinetab.scrollToTab(this);
            }
        },

 

该框架总的来说对初学者有很大的帮助,尤其是各种Bug,完善越多,对框架的了解就越多

 

以上是关于NFine中权限判断出错的问题的主要内容,如果未能解决你的问题,请参考以下文章

堵上NFine的SubmitForm漏洞

Code-NFine:NFine介绍

在我的“设置”片段中膨胀类 PreferenceScreen 时出错

Android:在drawerlayout中使用地图膨胀片段时出错

第二次在对话框中膨胀片段时出错

JS+JavaBean判断管理员增删改的操作权限