0

したがって、管理者としてログイン資格情報を入力するとアクセスできるログインページを作成したいと思います。管理者でない場合は、ログイン ページにリダイレクトされます。私のデータベースには、ブール型のフィールドがあります。

isAdmin <--datatype(byte")

では、どうすればこれを行うのが最善でしょうか?! 単体テストが簡単になるので、リポジトリパターンの方法でこれを行いたいと思います。

私はこれを何度もグーグルで検索しましたが、この問題について少し混乱し始めています。クラス、モデルなどはいくつ必要ですか?! コントローラーは1つでいいと思います。誰か良いアイデアを思いつきましたか?! ユーザーロールに関するDCIパターンについていくつか読んだことがありますが、基本的にデータベースでそのブール値をチェックするのは「のみ」なので、やり過ぎでしょうか? すべてのフィードバックに感謝します。

4

3 に答える 3

2

私が正しく理解していれば、同様の問題がありました。あなたの質問から、デフォルトのメンバーシッププロバイダーを使用していないようです(少なくともそのままです)。私もしませんでした。そこで私がしたことは、新しい認可属性を作成することでした。あなたの場合、次のようになります。

public class AdminOnlyAttribute : AuthorizeAttribute {
    IUserRepository _UserRepository;

    public SimpleUser SimpleUser { get; set; }

    public AdminOnlyAttribute() {
        _UserRepository = new SqlUserRepository(new DbContext());
    }

    protected override bool AuthorizeCore(HttpContextBase httpContext) {
        bool baseAuthorized = base.AuthorizeCore(httpContext);
        if (!baseAuthorized) {
            return false;
        } 

        //Here you use your repository to check if a user is an admin or not
        bool isAdmin = _UserRepository.IsAdmin(int.Parse(httpContext.User.Identity.Name));

        if (!isAdmin) {
            return false;
        }

        return true;
    }
}

リポジトリ メソッド IsAdmin は、提供されたユーザーの ID に対応するブール値をチェックするクエリと同じくらい簡単です。このようなもの(必要かどうかを再確認してくださいSingleOrDefault()):

public bool IsAdmin(int userID) {
    bool isAdmin = (from user in db.Users
                    where user.ID == userID
                    select user.isAdmin).SingleOrDefault();
    return isAdmin;
}

そして、これを次のように必要なアクションで使用します。

[AdminOnly]
public ActionResult Index(){
    //Code here...
}

これが false を返す場合、ActionResult は HttpUnauthorizedResult になり、理論上はログイン ページにリダイレクトされます。

于 2011-07-05T22:32:02.303 に答える
1

You should create a custom Membership Provider and check the user isAdmin as part of ValidateUser.

Alternatively if other users are allowed in, use a custom role provider.

The following link is a good place to start

http://theintegrity.co.uk/2010/11/asp-net-mvc-2-custom-membership-provider-tutorial-part-1/

于 2011-07-05T22:03:40.163 に答える
0

あなたの isAdmin 列はビットですか、それともバイトですか? それはおそらく少しあるはずです。資格情報と IsAdmin 列をチェックするクエリを作成するだけです。行が返された場合、ログインは成功しています。

于 2011-07-05T22:01:22.700 に答える