2015-09-15 19 views
9

を私はmvc4ののASP .NETへの新しい認証および承認と混乱しています。私たちは、Windows認証からユーザー名(HttpContext.Current.User.Identity.Name)を取得し、ユーザー名が存在し、ユーザーのロールがある場合はデータベースに対してチェックする内部Webサイトです。私はグローバル[許可]属性とロールを使用して、コントローラにアクセスできるようにしたいと思います。誰も私がどのように始めるのを助けることができますか?Windows認証とデータベースを介して権限ロールを追加 - MVCのasp.net

今のところ、ユーザー名を渡してデータベースからユーザーのデータと関連する役割を取得する機能があり、クエリデータがモデルに追加されます。この機能を使用してWebサイトにアクセスしますが、 dbに対して常に照会することなく、すべてのコントローラーとビューに対して照合するために同じデータを使用します。

答えて

16

あなただけcreate a custom role providerする必要があります。これを行うには、System.Web.Security.RoleProviderから継承し、特定のメンバーをオーバーライドするクラスを作成します。以下のコードはあなたを始めさせるはずです。すべてのthrow new NotImplementedException()を関数の実装に置き換えます。たとえば、IsUserInRoleを指定すると、ユーザーに指定された役割があるかどうかをデータベースに照会するコードが提供されます。

using System.Web.Security; 

namespace MyNamespace 
{   
    public class MyRoleProvider : RoleProvider 
    { 
     public override void AddUsersToRoles(string[] usernames, string[] roleNames) 
     { 
      throw new NotImplementedException(); 
     } 

     public override string ApplicationName 
     { 
      get; set; 
     } 

     public override void CreateRole(string roleName) 
     { 
      throw new NotImplementedException(); 
     } 

     public override bool DeleteRole(string roleName, bool throwOnPopulatedRole) 
     { 
      throw new NotImplementedException(); 
     } 

     public override string[] FindUsersInRole(string roleName, string usernameToMatch) 
     { 
      throw new NotImplementedException(); 
     } 

     public override string[] GetAllRoles() 
     { 
      throw new NotImplementedException(); 
     } 

     public override string[] GetRolesForUser(string username) 
     { 
      throw new NotImplementedException(); 
     } 

     public override string[] GetUsersInRole(string roleName) 
     { 
      throw new NotImplementedException(); 
     } 

     public override bool IsUserInRole(string username, string roleName) 
     { 
      throw new NotImplementedException(); 
     } 

     public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames) 
     { 
      throw new NotImplementedException(); 
     } 

     public override bool RoleExists(string roleName) 
     { 
      throw new NotImplementedException(); 
     } 
    } 
} 

すべてを実装する必要はありません。たとえば、アプリケーションがロールを作成または削除しない場合は、CreateRoleまたはDeleteRoleで何もする必要はありません。

はまた、それを利用するために知っているので、ASP.NETフレームワークを使用してロールプロバイダを登録する必要があります。 web.configを以下のように更新してください。

<configuration> 
    <system.web> 
     <roleManager defaultProvider="MyRoleProvider" enabled="true"> 
      <providers> 
       <add 
        name="MyRoleProvider" 
        type="MyNamespace.MyRoleProvider"   
        applicationName="MyApplicationName" /> 
      </providers> 
     </roleManager> 
    </system.web> 
</configuration> 
+0

がチェックするためにここに呼び出すために何[承認(のような... ..私はこれで始まり、私はどんな質問がある場合は、あなたが知っているよう – GiGi

+0

あなたは私がこれをどのように呼ぶのですか教えてくださいすることができますありがとうございました役割)]となるように制限することになる、そしてあなたは、コントローラにアクションメソッドに '[オーソライズ(役割=「管理者」)]'のような何かを行うことができ、私が説明するように、あなたがロールマネージャを実装しましたと仮定すると、 – GiGi

+0

@GiGi 「管理者」のユーザーだけがそのアクションメソッドにアクセスできます。 [ドキュメント](https://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute(v = 118).aspx)を参照してください。 – mason

関連する問題