1つ以上のロールのみがクラスにアクセスできるようにする正しい属性であるMVC3

asp.net asp.net-mvc-3 c# security
1つ以上のロールのみがクラスにアクセスできるようにする正しい属性であるMVC3

1つまたは複数のロールからのみアクセスできるようにコントローラークラスをロックダウンするにはどうすればよいですか? 2番目の例で `AuthorizeAttribute`を使用しようとしましたが、ページへのアクセスを許可するのではなく、強制的に認証を要求するようです。

[PrincipalPermission(SercurityAction.?????????)]
public class MySecuredController { ...

OR

[Authorize(Roles="MyRoleName")
public class MySecuredController { ...

OR

私は完全に間違っていますか?

スクリプト全体は、実際には単なるMVC3チュートリアルです…​

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.IO;
using System.Security.Permissions;

namespace mvc3test.Controllers
{
    [Authorize(Roles="taxpayer")]
    public class HomeController : Controller
    {

        public ActionResult Index()
        {
            ViewBag.Message = "Welcome to ASP.NET MVC!";
            return View();
        }

        public ActionResult About()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Index(HttpPostedFileBase dr405)
        {
            var saveLocation = Path.Combine(Server.MapPath("\\"),"returns");
            System.IO.Directory.CreateDirectory(saveLocation);
            dr405.SaveAs(Path.Combine(saveLocation,User.Identity.Name) + ".xlsx");
            ViewBag.Message = String.Format("File name: {0}, {1}Kb Uploaded Successfully.",dr405.FileName,(int)dr405.ContentLength / 1024);
            return View();
        }

    }
}

これを実行すると、資格情報を入力した後にサイトがログインします。 私の名前が画面の右上隅に表示されるため、これを知っています。 しかし、それはログイン画面に何度も何度も表示され続けます。

更新

そこで、 User.Identity.Name`が問題のユーザー名である User.IsInRole( “taxpayer”) の値に対して、 LogOn`アクションの `Redirect`メソッドにウォッチを追加しました。 `User.IsInRole(” taxpayer “)`はfalseを返しました。 以下にaspnet_dbストアドプロシージャを実行すると、返されたリスト内のユーザーを示します。

USE [aspnetdb]
GO

DECLARE @return_value int

EXEC    @return_value = [dbo].[aspnet_UsersInRoles_GetUsersInRoles]
        @ApplicationName = N'/',
        @RoleName = N'taxpayer'

SELECT  'Return Value' = @return_value

GO

だから今、私はそれがデータの問題かどうか疑問に思っています。 何かご意見は???

  0  0


ベストアンサー

2番目の方法

[Authorize(Roles="myrolename")]

正しい。 ユーザーがそのロールを持っていない場合、振る舞いは、アクセス権を持つロールでログインするようにユーザーに促すことです。 その動作を変更する場合は、独自の認証フィルターをロールする必要があります。

2


ページにアクセスするユーザーが認証されていないか、指定されたロールのメンバーではない場合(2番目のオプションは私が使用するオプションです)、認証ページにリダイレクトされます。 これはフィルターであり、許可ではありません。

1


タイトルとURLをコピーしました