1

サイト機能をアクティブ化するときに、自動的に WebApplication プロパティを設定したいと考えています。これはコードです:

   public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {             
                SPWeb currentWeb = ContentTypes.ValidateFeatureActivation(properties);
                using (SPSite site = new SPSite(currentWeb.Site.Url))
                {
                    SPWebApplication currentApplication = site.WebApplication;
                    if (currentApplication.MaxQueryLookupFields < 20)
                    {

                        SPSecurity.RunWithElevatedPrivileges(delegate()
                        {
                            try
                            {
                                currentApplication.MaxQueryLookupFields = 20;
                            }

                            catch (System.Security.SecurityException ex)
                            {
                                _log.ErrorFormat("no permission");
                            }
                        });

                    }
                }                
        }

ファーム管理者が機能をアクティブ化した場合でも、セキュリティ例外がスローされます (「アクセスが拒否されました」)。行で

currentApplication.MaxQueryLookupFields = 20;

AFAIK SPSecurity.RunWithElevatedPrivileges は、ファーム管理者ではなく、サイト管理者として実行されます。しかし、これはどのように行うことができますか?(RunWithElevatedPrivileges なしで、同じ例外が発生します。

4

2 に答える 2

0

RWEP ブロックの外部で作成される最初の SPSite は SPSite の現在のユーザー コンテキストで作成されるため、アプリケーション プール ID コンテキストを取得するには、RWEP 内で別の SPSite オブジェクトをインスタンス化する必要があります。だからこれを試してください:

public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        SPWeb currentWeb = ContentTypes.ValidateFeatureActivation(properties);
        using (SPSite site = new SPSite(currentWeb.Site.Url))
        {
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite _site = new SPSite(site.ID))
                {
                    SPWebApplication currentApplication = _site.WebApplication;
                    if (currentApplication.MaxQueryLookupFields < 20)
                    {
                        try
                        {
                            currentApplication.MaxQueryLookupFields = 20;
                        }
                        catch (System.Security.SecurityException ex)
                        {
                            _log.ErrorFormat("no permission");
                        }
                    }
                }
            });
        }
    }
于 2016-09-29T10:02:19.323 に答える
0

SPSecurity.RunWithElevatedPrivileges 内に新しい SPSite、SPWeb、および SPWebApplication オブジェクトを作成する必要があります。そうしないと、現在のユーザーと同じ権限でそれらを実行することになります。例えば

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
        SPSecurity.RunWithElevatedPrivileges(delegate()
             {             
                SPWeb currentWeb = ContentTypes.ValidateFeatureActivation(properties);
                using (SPSite site = new SPSite(currentWeb.Site.Url))
                {
                    SPWebApplication currentApplication = site.WebApplication;
                    if (currentApplication.MaxQueryLookupFields < 20)
                    {
                            try
                            {
                                currentApplication.MaxQueryLookupFields = 20;
                            }

                            catch (System.Security.SecurityException ex)
                            {
                                _log.ErrorFormat("no permission");
                            }


                    }
                }
            });                
        }
于 2012-05-23T21:03:03.180 に答える