2016-05-20 7 views
1

私は従業員でいっぱいになっている別々のデータベースを持っていて、それぞれ固有の電子メールアドレスを持っています。私が作成しているウェブサイトでは、従業員はアカウントを登録することができ、一致する電子メールアドレスを持っている場合は、連絡先情報を表示し、可能であれば編集します。ASP MVC IDでは、基準に基づいてアクセスを制限する最良の方法は何ですか?

これを達成するために使用したコードは次のとおりです。

[AllowAnonymous] 
    // GET: Contacts/Details/ 
    public ActionResult Details(int? id) 
    { 
     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     Contact contact = db.Contacts.Find(id); 
     if(User.IsInRole("Admin")||(User.Identity.GetUserName()==contact.Email)) 
     { 
      return View(contact); 
     } 

     if (contact == null) 
     { 
      return HttpNotFound(); 
     } 

     return RedirectToAction("AccessDenied","Error"); 

    } 

理想的には私は[AllowAnonymous]を削除し、

[Authorize(Roles="Admin",Users=User.Identity.GetUserName())] 

のようなものを持っていると思いますが、これは誤りプルアップ:

"User.Identity.GetUserName() an object reference is required".

どれsuggesionsを?

+0

'Users = User.Identity.GetUserName()'で達成しようとしていることは何ですか?編集:ああ私は今参照してください。アクションフィルタを作成することができます。それはかなり無痛なプロセスです。 –

+0

申し立てを作成するにはどうすればよいですか?デフォルトのASP.Net IDコードを使用しますか?ASP.Net MVCが付属していますか? – Win

答えて

1

新しい属性クラスを作成できます。新しい属性クラスは、Authorize属性クラスから継承する必要があります。新しい属性クラスで目的のパラメータを渡して、OnAuthorizationメソッドをオーバーライドして適切に再生できます。

+0

ありがとう、これはうまくいきました – xphacterzero

0

Authorize属性コンストラクタはConstant値のみをとり、ユーザごとに動的に使用することはできません。特定のタイプのユーザーがこのメソッドにしかアクセスできないようにするには、それらのロールを作成して代わりに使用します。

[Authorize(Roles="Admin,SpecialUsers")] 
関連する問題