.Net Web ADF 应用中的安全技术

简介:
任何Web应用都离不开安全性考虑,安全机制分为硬件安全和软件安全,前者一般指的是服务的硬件分层部署,硬件防火墙的设置,服务器的双机热备,后者离软件开发人员的距离更近,可以想到的有哪些呢——密钥、secure sockets layer(SSL)、权限设置等等,本文所谈到的就是这里面的一种,在arcgis server中通过权限来设定用户的访问内容。

    乍一看上去似乎是很easy的事情,N多人N个应用里早就把这套机制运用的如火纯青、滚瓜烂熟,但是在ArcGIS Server中出现了这样的需求,mananger用户需要访问地图更多的图层内容,需要能够使用webgis更多的功能,staff用户只能查看其中一部分内容,拥有部分功能的使用权限。51ditu/mapbar这种大众化消费的电子地图可能不需要考虑这些,也不会让用户去考虑这些,因为他们提供的是具有良好用户体验的公众性服务,但是在企业应用中,需要根据用户需求定制多样化的服务内容,这就不得不让开发设计者去考虑这些问题了。

    .Net Web ADF和ASP.Net可以有机结合在一起,这就让我们可以利用ASP.Net的登录安全机制来控制权限,当然在ADF中也可以编程实现另外一些内容,下面就开始一一分析。

    ASP.Net开发者肯定非常熟悉这样的界面:


    Web Site Administration Tool(WSAT)提供了两种安全设置:Internet和Local network,我们使用Internet方式并创建两个不同的用户组Managers和Staff,并创建了两个用户分别隶属于两个组manager1和staff1,manager相比staff可以多访问一个图层,多使用两个server功能(Indentify查询和一个QueryAttributeTask)。
private  string fullyEnabledRole = "Managers";
if (!User.IsInRole(fullyEnabledRole))
{
  // modify page content for role
}

    在上面的if语句中,加入三个方法,分别处理:

    HideLayer()//隐藏不需要被staff用户看到的图层
    RemoveItemFromToolbar()//将Indentify查询从工具条上移除
    RemoveTask()//将QueryAttributeTask从TaskManager中移除

    HideLayer()
private  void HideLayer(Map map,  string layerName)
{
    // 遍历所有Map Functionalities
    foreach (IMapFunctionality mapFunct in map.GetFunctionalities())
    {
        string layerId = GetLayerId(layerName, mapFunct);
        
        // 设置图层不可见
        if (!String.IsNullOrEmpty(layerId))
            mapFunct.SetLayerVisibility(layerId, false);
    }

    
    // 找到和Map关联的Toc
    Toc tocCtrl = FindControlOfType(typeof(Toc), Page.Controls) as Toc;
    if (tocCtrl != null && tocCtrl.BuddyControl == map.ID)
    {
        // 移除之前隐藏图层在Toc中的节点
        foreach (TreeViewPlusNode resource in tocCtrl.Nodes)
        {
            TreeViewPlusNode nodeToRemove = null;

            foreach (TreeViewPlusNode layerNode in resource.Nodes)
            {
                TreeViewPlusNode matchNode = FindNodeRecursive(layerNode, layerName);
                if (matchNode != null)
                {
                    nodeToRemove = matchNode;
                    break;
                }

            }

            if (nodeToRemove != null)
                nodeToRemove.Remove();
        }

    }

}

    RemoveItemFromToolbar()
private  void RemoveItemFromToolbar(Toolbar toolbar,  string toolbarItemName)
{
    for (int i=0; i<toolbar.ToolbarItems.Count; i++)
    {
        if (toolbar.ToolbarItems[i].Name == toolbarItemName)
        {
            toolbar.ToolbarItems.RemoveAt(i);
            break;
        }

    }

}

    RemoveTask()
private  void RemoveTask(TaskManager taskManager,  string taskName)
{
    string menuId = "";

    foreach (Control ctl in taskManager.Controls)
        if (ctl.ID == taskToRemove)
        {
            FloatingPanel queryTask = ctl as FloatingPanel;
            if (queryTask != null)
                menuId = queryTask.Title;

            // 从TaskManager中移除Task
            taskManager.Controls.Remove(ctl);
        }


    Control mCtl = FindControlRecursive(taskManager.Page, taskManager.BuddyControl);
    if (mCtl != null && mCtl is Menu)
    {
        Menu menu = (Menu)mCtl;
        for (int i = 0; i < menu.Items.Count; i++)
        {
            if (menu.Items[i].Text == menuId)
            {
                menu.Items.RemoveAt(i);
                break;
            }

        }

    }

}

    这样用户通过不同的身份登录就可以看到各自的内容信息。通过ASP.Net登录控件也可以实现部分效果,如LoginView,可以将QueryAttributeTask拖到LoginView上,对应着manager用户,这样存在一个弊端,就是不能在TaskManager中使用该Task。


    思路就是这样了,你是不是也有这样的需求呢,试试吧。


本文转自Flyingis博客园博客,原文链接:http://www.cnblogs.com/flyingis/archive/2007/12/06/985096.html,如需转载请自行联系原作者

相关文章
|
3天前
|
Java 应用服务中间件 测试技术
深入探索Spring Boot Web应用源码及实战应用
【5月更文挑战第11天】本文将详细解析Spring Boot Web应用的源码架构,并通过一个实际案例,展示如何构建一个基于Spring Boot的Web应用。本文旨在帮助读者更好地理解Spring Boot的内部工作机制,以及如何利用这些机制优化自己的Web应用开发。
15 3
|
12天前
|
XML 存储 Java
11:Servlet中初始化参数的获取与应用-Java Web
11:Servlet中初始化参数的获取与应用-Java Web
27 3
|
3天前
|
缓存 数据库连接 数据库
构建高性能的Python Web应用:优化技巧与最佳实践
本文探讨了如何通过优化技巧和最佳实践来构建高性能的Python Web应用。从代码优化到服务器配置,我们将深入研究提高Python Web应用性能的各个方面。通过本文,读者将了解到一系列提高Python Web应用性能的方法,从而更好地应对高并发和大流量的挑战。
|
4天前
|
缓存 监控 前端开发
探索现代Web应用的性能优化实践
【5月更文挑战第10天】随着互联网技术的飞速发展,用户对Web应用的响应速度和流畅度要求越来越高。性能优化已成为前端开发中不可或缺的一环。本文将深入探讨Web应用性能优化的关键策略,包括代码分割、资源压缩、缓存利用、服务端渲染等技术手段,以及如何通过工具进行性能监测和分析。我们将从原理出发,结合实际案例,帮助开发者构建更快速、更高效的Web应用。
|
5天前
|
XML 开发框架 .NET
C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作
C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作
|
8天前
|
开发框架 JSON .NET
.Net4.0 Web.config 配置实践
.Net4.0 Web.config 配置实践
|
12天前
|
设计模式 存储 前端开发
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
25 4
|
12天前
|
存储 前端开发 安全
13:会话跟踪技术Session的深度应用与实践-Java Web
13:会话跟踪技术Session的深度应用与实践-Java Web
28 3
|
12天前
|
存储 前端开发 搜索推荐
12:会话跟踪技术Cookie的深度应用与实践-Java Web
12:会话跟踪技术Cookie的深度应用与实践-Java Web
24 4
|
13天前
|
C# Windows
一款.NET开源、简洁易用的Windows桌面小说阅读应用
一款.NET开源、简洁易用的Windows桌面小说阅读应用