• 开启SHAREPOINT 2007匿名用户搜索功能


    发现问题:在Sharepoint 2007企业门户开发及使用过程中我们发现在开启网站的匿名访问的同时,匿名帐户的搜索也是我必须要考虑的问题。正常情况下,开启匿名访问的网站并不能使匿名帐户有权限进行搜索,依然要求我填入用户名及密码。

    查找原因

    匿名帐户是没有搜索权限的。会自动判断权限,然后转到拒绝访问页面。可以判断有一个权限判断的功能在页面里面。

    使用正常权限发现,权限结果页面是layouts下的OSSSearchResults.aspx页面。

    于是找到该页面,然后用记事本打开它,发现里面第一行:

     <%@ Page Language="C#" Inherits="Microsoft.SharePoint.WebControls.LayoutsPageBase" MasterPageFile="~/_layouts/application.master"   EnableViewState="false" EnableViewStateMac="false"   %>

    现在可以看到这个页面是继承了LayoutsPageBase类的。

    用Reflector打开Sharepoint.dll后找到Microsoft.SharePoint.WebControls.LayoutsPageBase类。

    找到Onload事件,发现并没有异常,只是简单的:base.OnLoad(e);

    但是在他的下面发现了一个OnLoadComplete事件的重写。

    protected override void OnLoadComplete(EventArgs e)
    {
        base.OnLoadComplete(e);
        if ((this.RightsCheckMode & RightsCheckModes.OnLoadComplete) != RightsCheckModes.None)
        {
            this.CheckRights();
        }
    }

    估计就是它了:CheckRights()

    在深入一步,查看它的方法实现:

     protected void CheckRights()
    {
        bool flag;
        SPUser currentUser = SPContext.Current.Web.CurrentUser;
        if (currentUser == null)
        {
        }
        flag = flag ? currentUser.IsSiteAuditor : false;
        if (!this.RequireSiteAdministrator && !flag)
        {
            if (this.PageTarget == null)
            {
                this.PageTarget = base.Web;
            }
            SPBasePermissions rightsRequired = this.RightsRequired;
            if (this.RequireDefaultLayoutsRights)
            {
                rightsRequired |= DefaultLayoutsRights;
            }
            flag = this.PageTarget.DoesUserHavePermissions(rightsRequired);
        }
        SPUtility.HandleAccessDenied(new UnauthorizedAccessException());
    }

    果真里面就是判断权限并跳转页面的实现代码。

    下面就知道怎么办了吧。可以做个继承把这块重写了。但是经过测试,直接把继承这段删除掉就可以了。

    删除代码像这样就可以了:<%@ Page Language="C#" MasterPageFile="~/_layouts/application.master"   EnableViewState="false" EnableViewStateMac="false"   %>

    后记:其实解决这个问题并不是关键。况且,这也并不是解决匿名搜索的唯一方法。我们要做的只是掌握这种解决问题的方法及思路。我做Sharepoint开发才一年左右时间。一年时间里发现其中有很多可以可探索的东西,更加可以应用到普通的.NET项目中。

    更希望和大家一起交流Sharepoint相关问题。

  • 相关阅读:
    数字基本数据类型范围比较
    java中float和double的区别
    ASP.NET中javascript与c#互相访问
    Javascript技术之详尽解析event对象
    Java基础-Java中的Calendar和Date类
    逻辑运算符
    JS获取当前时间
    几秒后刷新页面
    【LiteOS】LiteOS任务篇源码分析删除任务函数
    POJ 2385 Apple Catching (DP)
  • 原文地址:https://www.cnblogs.com/scally/p/1451071.html
Copyright © 2020-2023  润新知