2009-07-23 9 views
0

ユーザーが2つの異なる役割のメンバーでない限り、特定のURLへのアクセスを制限したいと考えています。この場合、ユーザが報告およびアーカイブロールの両方にいる場合にのみ、このURLへのアクセスを許可したいと思います。 ASP.netでこれを行う方法はありますか?Asp.Net条件付きURLの役割認証

<location path="testpage.aspx"> 
<system.web> 
    <authorization> 
    <allow roles="Reporting, Archiving"/> 
    <deny users="*"/> 
    </authorization> 
</system.web> 

私はこのような何かしたい:あなたは、特定のユーザーID、ページのURL、および許可されたロールのリストを与えられた、SQL関数を作成することができ

<location path="testpage.aspx"> 
<system.web> 
    <authorization> 
    <allow roles="Reporting & Archiving"/> 
    <deny users="*"/> 
    </authorization> 
</system.web> 

+1

MEANSが報告&アーカイブする別の役割である可能性はありますか?あなた自身の役割の実装をしない限り、あなたが要求しているような機能を持っていることを思い出してください。 – xandy

+0

あなたは答えとして、xandyを投稿してください。 – Greg

+0

はい私は報告とアーカイブの両方を含む別の役割を作成することができますが、b/cを回避しようとしていましたが、既存のユーザーを更新してその役割をプロファイルに追加する必要がありました。私はweb.configでそれを行う簡単な方法があることを願っていました。 – Jfetner

答えて

1

醜いですが、現在使用しているロールプロバイダ(SqlRoleProvider、WindowsTokenRoleProvider、AuthorizationStoreRoleProvider)を継承し、GetRolesForUserをオーバーライドし、ベースの実装を呼び出してロールを取得し、必要に応じてそれらを結合できます。次に、カスタムロールプロバイダを<roleManager>設定セクションのweb.configに配置します。

1つのメソッド(GetUserInRoleかもしれない)をオーバーライドし、必要に応じて組み合わせるだけで済みます。

public override string[] GetRolesForUser(string username) { 
    List<string> roles = new List<string>(base.GetRolesForUser(username)); 
    if(roles.Contains("Reporting") && roles.Contains("Archiving")) { 
     roles.Add("ReportingAndArchiving"); 
    } 
    return roles.ToArray(); 
} 
0

を(XML)を返し、そのURLにアクセスが許可されているかどうかを示すビットを返し、その後、そのURLを使用して、javascriptまたはDHTMLメニューの有効な選択肢として表示するかどうかを決定するフラグを設定します。どんなものでも。

0

implement custom Role Providerです。次に、ReportingAndArchivingロールを新規に定義し、ReportingAndArchivingロールが要求されたときに、ユーザーがIsUserInRoleメソッド内のReporting and Archivingロールに属しているかどうかを確認できます。

関連する問題