Code-NFine:NFine权限控制

Posted storebook

tags:

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

ylbtech-Code-NFine:NFine权限控制

 

1.返回顶部
1、
NFine框架研究
1.前台业务操作
1.1 系统菜单配置方法
技术分享图片
1.2 菜单管理配置方法
1.2.1 按钮管理
技术分享图片
1.2.2 新增按钮
技术分享图片
 
2.后台逻辑实现
2.1 菜单绑定展示
/Home/Index
技术分享图片
/Content/js/index.js 对应操作方法
refer /Content/js/framework-clientdata.js 客户端数据
function GetLoadNav() {
    var data = top.clients.authorizeMenu;
    var _html = "";
    $.each(data, function (i) {
        var row = data[i];
        if (row.F_ParentId == "0") {
            _html += ‘<li>‘;
            _html += ‘<a data-id="‘ + row.F_Id + ‘" href="#" class="dropdown-toggle"><i class="‘ + row.F_Icon + ‘"></i><span>‘ + row.F_FullName + ‘</span><i class="fa fa-angle-right drop-icon"></i></a>‘;
            var childNodes = row.ChildNodes;
            if (childNodes.length > 0) {
                _html += ‘<ul class="submenu">‘;
                $.each(childNodes, function (i) {
                    var subrow = childNodes[i];
                    _html += ‘<li>‘;
                    _html += ‘<a class="menuItem" data-id="‘ + subrow.F_Id + ‘" href="‘ + subrow.F_UrlAddress + ‘" data-index="‘ + subrow.F_SortCode + ‘">‘ + subrow.F_FullName + ‘</a>‘;
                    _html += ‘</li>‘;
                });
                _html += ‘</ul>‘;
            }
            _html += ‘</li>‘;
        }
    });
    $("#sidebar-nav ul").prepend(_html);
}
2.2 按钮绑定展示-举例:架构管理
2.2.1 /Areas/SystemManage/Organiz/Index
技术分享图片
2.2.2 1/2 /Content/js/framework-clientdata.js 客户端数据
var clients = [];
$(function () {
    clients = $.clientsInit();
})
$.clientsInit = function () {
    var dataJson = {
        dataItems: [],
        organize: [],
        role: [],
        duty: [],
        user: [],
        authorizeMenu: [],
        authorizeButton: []
    };
    var init = function () {
        $.ajax({
            url: "/ClientsData/GetClientsDataJson",
            type: "get",
            dataType: "json",
            async: false,
            success: function (data) {
                dataJson.dataItems = data.dataItems;
                dataJson.organize = data.organize;
                dataJson.role = data.role;
                dataJson.duty = data.duty;
                dataJson.authorizeMenu = eval(data.authorizeMenu);
                dataJson.authorizeButton = data.authorizeButton;
            }
        });
    }
    init();
    return dataJson;
}
2.2.2 2/2 /Content/js/framework-ui.js 按钮控制函数
$.fn.authorizeButton = function () {
    var moduleId = top.$(".NFine_iframe:visible").attr("id").substr(6);
    var dataJson = top.clients.authorizeButton[moduleId];
    var $element = $(this);
    $element.find(‘a[authorize=yes]‘).attr(‘authorize‘, ‘no‘);
    if (dataJson != undefined) {
        $.each(dataJson, function (i) {
            $element.find("#" + dataJson[i].F_EnCode).attr(‘authorize‘, ‘yes‘);
        });
    }
    $element.find("[authorize=no]").parents(‘li‘).prev(‘.split‘).remove();
    $element.find("[authorize=no]").parents(‘li‘).remove();
    $element.find(‘[authorize=no]‘).remove();
}

 

3.访问控制
/App_Start/01 Handler/HandlerAuthorizeAttribute.cs
using NFine.Application.SystemManage;
using NFine.Code;
using System.Text;
using System.Web;
using System.Web.Mvc;

namespace NFine.Web
{
    public class HandlerAuthorizeAttribute : ActionFilterAttribute
    {
        public bool Ignore { get; set; }
        public HandlerAuthorizeAttribute(bool ignore = true)
        {
            Ignore = ignore;
        }
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (OperatorProvider.Provider.GetCurrent().IsSystem)
            {
                return;
            }
            if (Ignore == false)
            {
                return;
            }
            if (!this.ActionAuthorize(filterContext))
            {
                StringBuilder sbScript = new StringBuilder();
                sbScript.Append("<script type=‘text/javascript‘>alert(‘很抱歉!您的权限不足,访问被拒绝!‘);</script>");
                filterContext.Result = new ContentResult() { Content = sbScript.ToString() };
                return;
            }
        }
        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);
        }
    }
}

2、

2.返回顶部
 
3.返回顶部
 
4.返回顶部
 
5.返回顶部
 
 
6.返回顶部
 
技术分享图片 作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。



以上是关于Code-NFine:NFine权限控制的主要内容,如果未能解决你的问题,请参考以下文章

NFine中权限判断出错的问题

堵上NFine的SubmitForm漏洞

NFine常见错误

nfine框架怎么集成oracle

NFine框架JqGrid导出选中行为Excel实现方法

NFine平台去掉平台介绍页面出现的一系列问题