1

ユーザーを追加するときに、ユーザーに付与できる役割のタイプを選択できる登録システムを構築したいと考えています。また、役割に応じて、コントローラーの特定のアクションにアクセスできるかどうかが決定されます。

たとえば、admin と developer という 2 つのロールがあるとします。また、以下のようなものを使用すると、管理者としての役割を持つユーザーのみが次のアクションにアクセスできます。

[Authorize(Roles = "admin"]
public ActionResult CreateUser()
{
   return View();
}

私の知る限り、カスタムを実装する必要がありますRoleProviderIPrincipal? 私はそれについていくつかの例を見つけようとしましたが、私が正確に探しているものを得ることができませんでした. これが私のRegisterModelが現在どのように見えるかです

public class RegisterModel
    {
        [Key]
        public Guid Id;
        [Required]
        [Display(Name="First Name")]
        public string FirstName {get; set;}

        [Required]
        [Display(Name="Last Name")]
        public string LastName {get; set;}

        [Required]
        [Display(Name="Email Id")]
        [DataType(DataType.EmailAddress)]
        public string EmailId {get; set;}

        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }

        [Required]
        [Display(Name = "Password")]
        [DataType(DataType.Password)]
        public string Password { get; set; }

        [Required]
        [Display(Name = "Confirm Password")]
        [DataType(DataType.Password)]
        public string ConfirmPassword { get; set; }

       [Required]
       [Display(Name = "Role")]
       public UserRole Role { get; set; }

    }



  public class UserRole
    {
        [Key]
        public int RoleId { get; set; }

        public string RoleName { get; set; }
    }

ユーザーを追加するときにロールを決定し、Custom Authorize 属性を使用したいのです。私の問題を解決できる記事やブログはありますか? または任意の提案、それを行う方法?

4

2 に答える 2

6

最近、メンバーシップ プロバイダーを使用せずにRole 承認を実装しました。これは役立つかもしれないと思いました.UserName、Password、およびRoleを含むデータベーステーブルがあり、データベースに対してロールを確認する必要がありました。

以下は、私のカスタム RoleFilter クラスです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcApplicationrazor.Models.ActionFilters
{
    public class RoleFilter : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (GetCurrentUserRole() != "Admin")// Check the Role Against the database Value
            {
                filterContext.Result = new RedirectResult("~/Redirect/NoPermission");
                return;
            }
        }
    }
}

コントローラ:

[RoleFilter]//Check the Role, if not allowed redirect to NoPermission view
public ActionResult Index()
{
   return View();
}
于 2013-06-10T12:32:03.023 に答える