5

ユーザーの編集ページ(例:/user/pure.krome/edit)へのアクセスをロックアウトしたい場合

a)Identity.IsAuthenticated = false

またはそれらは認証されますが

b)Idenitity.Name!=編集しようとしているユーザーページのユーザー名
c)Identity.UserType()!= UserType.Administrator //これは、RoleProvidersを使用しないロールのようなものです。

コントローラーまたはコントローラーのアクションメソッドを何かで飾ることができると思いますが、何がわからないのですか?

4

3 に答える 3

3

を見てくださいAuthorizeAttribute

ASP.Net MVC:AuthorizeAttributeをオーバーライドできますか?

于 2009-06-03T13:51:34.287 に答える
3

AuthorizeAttributeから派生したカスタム属性は、これを行うために使用するものです。OnAuthorizeメソッドをオーバーライドし、独自のロジックを実装します。

public class OnlyUserAuthorizedAttribute : AuthorizeAttribute
{
    public override void OnAuthorize( AuthorizationContext filterContext )
    {
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            filterContext.Result = new HttpUnauthorizeResult();
        }
        ...
    }
}
于 2009-06-03T13:53:24.720 に答える
2

次の ActionFilterAttribute を実装しました。これは、認証とロールの両方を処理するように機能します。次のように、自分の DB テーブルにロールを格納しています。

  • ユーザー
  • UserRole (UserID および RoleID 外部キーを含む)
  • 役割
public class CheckRoleAttribute : ActionFilterAttribute
{
    public string[] AllowedRoles { get; set; }


    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        string userName = filterContext.HttpContext.User.Identity.Name;

        if (filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            if (AllowedRoles.Count() > 0)
            {
                IUserRepository userRepository = new UserRepository();
                User user = userRepository.GetUser(userName);
                bool userAuthorized = false;
                foreach (Role userRole in user.Roles)
                {
                    userAuthorized = false;
                    foreach (string allowedRole in AllowedRoles)
                    {
                        if (userRole.Name == allowedRole)
                        {
                            userAuthorized = true;
                            break;
                        }
                    }
                }
                if (userAuthorized == false)
                {
                    filterContext.HttpContext.Response.Redirect("/Account/AccessViolation", true);
                }
            }
            else
            {
                filterContext.HttpContext.Response.Redirect("/Account/AccessViolation", true);
            }
        }
        else
        {
            filterContext.HttpContext.Response.Redirect(FormsAuthentication.LoginUrl + String.Format("?ReturnUrl={0}", filterContext.HttpContext.Request.Url.AbsolutePath), true);
        }


    }

私はこれをこのように呼んでいます...

    [CheckRole(AllowedRoles = new string[] { "admin" })]
    public ActionResult Delete(int id)
    {
        //delete logic here
    }
于 2009-06-04T14:48:56.263 に答える