2

これが私の最初のリクエストなので、それほど難しくはありません。:)

いくつかのSharepointWebパーツと多くのASP.Netサイトで構成されるSharepoint2010-アプリケーションを構築しています。したがって、MVCなしでASP.Netを使用するように制限されています。この決定は下され、拒否することはできません。

偽装を伴うWindows認証を使用しています。ユーザーはアプリケーションデータベースに保存されます。ユーザーとともに、特定のオブジェクトおよび特定のアクションに対する権限を持つロールがあります。これらの情報はすべてカスタムデータベースに保存されます。

データベースにはデータアクセス層(EF 4.0)があります。Sharepointは.NETFramework3.5に制限されているため、ビジネスロジックは、DALを使用するWCFデータサービスと、WCFデータサービスにアクセスして必要な情報を取得するビジネスロジックライブラリで構成されます。

ASP.Net-PagesとSharepointWebパーツは、ビジネスロジックに直接アクセスしています。

私が今必要としているのは、特定のオブジェクトにアクセスすることをユーザーに許可するために、データベースに対してユーザーをチェックしているある種のマネージャークラスです。プログラムでやりたくない。アノテーションを使用して、ビジネスレイヤーのメソッドを呼び出すことができるかどうかを指定したいと思います。さらに、プログラムでif句を使用せずに、ASP.Netサイトにいくつかのものを隠したいと思います。

誰かが私にこれを達成するためのヒントを与えることができますか?それを実現するために標準フレームワークの一部をカスタマイズする方法はありますか?

セッションに保存したいユーザーとその役割と権限。これは良い方法ですか?アプリケーションはローカルネットワークでのみアクセス可能です。

4

2 に答える 2

0

アプリケーションホストとしてsharepointに滞在しました。

すべてのセキュリティ質問を実装するカスタム UserControl を実装しました。

public partial class FMD_RoleEnabledControl : System.Web.UI.UserControl
{
    public string EnabledRoles { get; set; }
    public bool HasDataBinding { get; set; }


    public string CurrentUserName
    {
        get { return Page.User.Identity.Name; }
    }

    protected override void OnPreRender(EventArgs e)
    {
        if (!HasDataBinding)
            Visible = EnabledRoles.Split(',').Any(rolle => new FMDRoleProvider().IsUserInRole(CurrentUserName, rolle));
        base.OnPreRender(e);
    }

    protected override void OnLoad(EventArgs e)
    {
        if(HasDataBinding)
            Visible = EnabledRoles.Split(',').Any(rolle => new FMDRoleProvider().IsUserInRole(CurrentUserName, rolle));
        base.OnLoad(e);
    }
}

Custom-RoleProvider

public class FMDRoleProvider : RoleProvider
{
    public const string SEPERATOR = ",";

    ...

    public override string[] GetRolesForUser(string username)
    {
        if (username == null || username == "")
            throw new ProviderException("Kein User-Name übergeben"); //TODO

        string tmpRollen = "";

        RechteManager rm = new RechteManager();
        var rollen = rm.GetUserRollen(username);
        foreach (var rolle in rollen)
        {
            tmpRollen += rolle.ROL_Name + SEPERATOR;
        }

        if (tmpRollen.Length > 0)
        {
            //Letzten seperator entfernen
            tmpRollen = tmpRollen.Substring(0, tmpRollen.Length - 1);
            return tmpRollen.Split(',');
        }

        return new string[0];
    }

    ...

    public override bool IsUserInRole(string userName, string roleName)
    {
        if (userName == null || userName == "")
            throw new ProviderException("User name cannot be empty or null."); //TODO
        if (roleName == null || roleName == "")
            throw new ProviderException("Role name cannot be empty or null."); //TODO

        RechteManager rm = new RechteManager();
        return rm.IsUserInRolle(userName, roleName);
    }
}

使用法

public partial class CustomControl: FMD_RoleEnabledControl

<custom:CustomControl ID="custom" runat="server" EnabledRoles="Admin" HasDataBinding="True" />

ロールをチェックする唯一の最初のアプローチですが、非常にうまく機能します。2 番目のターゲットとして、特定のアクションに対するチェックなど、追加のセキュリティ機能を実装します。また、RoleProvider を web.config に登録する必要があります。でも時間が短い(;_;)

于 2012-12-13T08:37:54.717 に答える
0

スタックオーバーフローへようこそ! これについてのいくつかの考え -

  1. いとこのサイトhttp://sharepoint.stackexchange.comでこれらの質問をする方が適しているかもしれません。

  2. これは、Web ファームのアーキテクチャによって異なります。Web フロント エンドとデータ ソースが同じサーバー上にある場合、Windows 認証を使用して現在のユーザーを簡単に判別できます。ただし、Web フロント エンドとデータ ソースが別々のサーバー上にある場合、ユーザーの資格情報を共有ポイント サーバーの背後にあるサーバーと共有できないという「ダブル ホップ」シナリオのために、いわば制限に達しています。
    回避するには、SharePoint 環境で Kerberos 認証を使用して調査します。これにより、SharePoint はファーム全体でユーザー資格情報を追跡できます - http://blogs.technet.com/b/tothesharepoint/archive/2010/07/22/whitepaper-configuring- kerberos-authentication-for-sharepoint-2010-and-sql-server-2008-r2-products.aspx

  3. さらに別の方法として、SharePoint をアプリケーション ホストとして使用しないでください。Web アプリケーションを作成し、それを独自の Web サイト (http://mysupercoolsite.organization.com) として展開し、SharePoint で、「フル ページ垂直」レイアウトの新しい「Web パーツ ページ」を作成します。次に、「ページ ビューアー」Web パーツをページに追加し、mysupercoolsite.organization.com への URL を指定します。このように、SharePoint はユーザーにとってこのアプリケーションへの「ポータル」ですが、すべての認証、承認、および構造はアプリケーション自体に基づいており、SharePoint にはまったくありません。

于 2012-10-03T18:17:06.920 に答える