1

私はSharePointアプリケーションを作成していて、できるだけ頻繁に正しい方法で物事を実行したいと考えています。

サイト定義に一連のリストを展開していますが、規則を維持するために一連のGet()メソッドへのデータアクセスをロックダウンしたいと思います。

一部のリストでは、リスト定義にSecurityBits = "22"が設定されています。これは、リストアイテムのエントリをUIでのみ変更する必要があるためです。

虐待を避けたいSPSecurity.RunWithElevatedPrivileges。また、デリゲートで機能SPSecurity.RunWithElevatedPrivilegesを使用できない場所の制限を回避したいと思います。return

これは、これを実施するための良い方法のようです。通常のセキュリティでリストアイテムを取得するためにリストを呼び出す場合は、を呼び出すことができますvar PostList = CoreLists.Posts。昇格された権限で同じリストを呼び出す必要がある場合は、var PostList = CoreLists.SystemAccount.Posts

これはこれを行うための良い方法ですか?

public static class CoreLists
{
    public static SPList Posts()
    {
        return SPContext.Current.Web.GetList(SPContext.Current.Web.ServerRelativeUrl + "/lists/CommunityPost");
    }
    public static class SystemAccount
    {
        public static SPList Posts()
        {
            using (var elevatedSite = new SPSite(SPContext.Current.Site.ID, SPContext.Current.Site.SystemAccount.UserToken))
            using (var web = elevatedSite.OpenWeb())
                return web.GetList(web.ServerRelativeUrl + "/lists/CommunityPost");
        }
    }
}
4

1 に答える 1

1

セキュリティコンテキストが理にかなっている限り、最初のクラスは問題ないと思います(つまり、セキュリティが最も低いユーザーは、これらのメソッドを使用してリストアイテムにアクセスできます)。2番目のusingステートメントがそれを呼び出すコードにどのように影響するのか興味があります。

ElevatePrivelegesの特徴は、広く使用されているデータアクセスコードがある場合、SharePoint UIでリストに直接アクセスできるようにしたくないが、コンテキストで実行されるコードは、ユーザーコントロールなどのリストアイテムにアクセスします。

覚えておくべきいくつかのこと:1。SharePointのリストアクセスコードでのメモリリークを常に認識してください。クラスでは、SPRequestの破棄を処理する限り、両方の状況をうまく処理しました。2.コードでSPList.Itemsを使用することはほとんどありません。この方法でリストを表示し、リストを呼び出すコードを管理しない場合、特定のクエリではなく.Itemsプロパティを呼び出すと、パフォーマンスの問題が発生する可能性があります。そのリスト。

お役に立てれば

于 2012-08-16T02:23:04.613 に答える