2016-06-24 11 views
0

TLと#MVCシンプルなカスタム認証; DRC役割

を編集

は基本的に、私はいくつかの関数に伝えたい:[OK]を、私はこのユーザーに私の自己をチェックしました、彼は大丈夫です。今、彼についての任意のデータを保存し、私のアプリの特定の部分にアクセスする権限を与える彼のためのセッションを作成します。この種の

何か:

logInUserFrameworkFunction(new UserStruct(int id, string username, RolesEnum[] roles)); 

そしてすべてが[Authorize(Roles = RolesEnum.Admin | RolesEnum.Manager)]属性を機能させるために、バックグラウンドで処理されるよりも。

私はセッション私の自己でこれを作ることができるが、私はその部分をスキップしたいと思います:D


私はMVCとEntity Frameworkので遊んだ、と今私は簡単なユーザー認証を実装したいのですが役割を持つ

私はこのようなものになります私のデータベース内Userクラス/テーブルがありますログインコントローラでチェックし、今

public class Role { 
    int ID; 
    RoleType Type; // this is an Enum 
} 

public Enum RoleType { 
    visitor, employee, admin 
} 

:次のようになります

public class User { 
    int ID; 
    string Email; 
    string Password; 
    Role Role; 
... 
} 

そしてRoleクラスを指定されたユーザー名とパスワードを持つユーザーが簡単な場合は、次のようにします。

[HttpPost] 
    public ActionResult LogIn(LogIn login) { 
     // If credentials are valid 
     if(new UserManager().IsValid(login.Username, login.Password)) { 
      var user = db.getUserByEmail(login.Username); 
... 

私は簡単にセッションにユーザーIDRoleを保存し、よりすべての関連するコントローラ上のいくつかのfunctionを呼び出すことにより、資格情報をチェックするが、私はC#とMVCの機能の一部を使用することができます。


私はむしろ属性で行うことができますが、わかりません。

これは私がそれは次のようになり想像です:

[Roles(RoleType.visitor, RoleType.employee)] 
public ActionResult SomeProtectedAction() { 
// only employee and visitor can access this, 
// others get redirected to where ever 
... 
} 

答えて

1

あなたはこのような役割を使用して承認することができます。

[Authorize(Roles= MyEnum.Admin | MyEnum.Moderator)] 
public ActionResult myAction() 
{ 
} 

承認属性を使用すると、ここで、コントローラレベルで適用されるが、必要に応じてアクションメソッドにのみ適用できます。

ユーザロジックを含む認証Cookieを返す認証ロジック(ASP.NET ID)が正しく設定されていることが条件です。 ログインに成功した後、コントローラメソッドにリクエストを行うと、クッキーはバックグラウンドでアンパックされ、ユーザプロパティthis.Userはそのユーザのロールを含むこのデータで満たされます。

authorize属性で自動的にチェックが行われます。

+0

これは、コントローラの大規模なアクセスを提供し、メソッドごとのレベルでアクセスを絞り込むことができる、ロールの本当の機能です。コントローラにアクセスする必要があるStaffという役割があるとしましょう(コントローラ全体が装飾されているので、Staffの役割に誰でもアクセスできます)。ただし、削除機能をAdminsのみに限定したいので、* Staff *と* Adminsの両方のユーザーだけが削除できるように、管理者ロールで削除メソッドを具体化するようにしましょう。スタッフとユーザーだけの人はできません。 (ビジネスロジック:アカウントごとに2つのロールreq。) –

+0

私はこのような役割をどのように使用できるのかを知っていますが、どのようにユーザーにログインするのですか。私が呼ぶことができるこのような機能はありますか? :identityLoginUser(新しいidentityUser(int id、string username、RolesEnum [] roles) '、バックグラウンドでCookieを作成するのではなく、すべて最小限の労力で作業していますか? – Reygoch

+0

ASP.NET IDの基本を理解していれば、 - ) [こちら](http://www.codeproject.com/Articles/762428/ASP-NET-MVC-and-Identity-Understanding-the-Basics)を検索し、「サインインヘルパー - 基本アイデンティティ2.0 Sign-In API」を参照してください。このv2.0には新しいものがありますが、あまり変わらないはずです。 – Legends