NFine中权限判断出错的问题
问题描述:登录后(除admin账号外,admin不做权限检测)点击栏目一,弹出了窗口一,再点击栏目二,弹出了窗口二,然后再点击窗口一,再执行窗口一中的操作时,发现已没有任何权限,调试后发现在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,完善越多,对框架的了解就越多