Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC3哪一个属性是只允许一个或多个角色访问类的正确属性?_C#_Asp.net_Asp.net Mvc 3_Security - Fatal编程技术网

C# MVC3哪一个属性是只允许一个或多个角色访问类的正确属性?

C# MVC3哪一个属性是只允许一个或多个角色访问类的正确属性?,c#,asp.net,asp.net-mvc-3,security,C#,Asp.net,Asp.net Mvc 3,Security,如何将控制器类锁定为只能由一个或多个角色访问?在第二个示例中,我尝试使用authorized属性,但它似乎强制请求授权,而不是授予对页面的访问权限 [PrincipalPermission(SercurityAction.?????????)] public class MySecuredController { ... 或 或 我完全错了吗 整个脚本实际上只是MVC3教程 using System; using System.Collections.Generic; using System

如何将控制器类锁定为只能由一个或多个角色访问?在第二个示例中,我尝试使用
authorized属性
,但它似乎强制请求授权,而不是授予对页面的访问权限

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

我完全错了吗

整个脚本实际上只是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();
        }

    }
}
当我运行此操作时,站点会在输入我的凭据后将我登录。我知道这一点,因为我的名字出现在屏幕的右上角。但它只是一次又一次地把我带到登录屏幕

更新

因此,我在
LogOn
操作中的
Redirect
方法中添加了一个监视
User.IsInRole(“纳税人”)
的值,其中
User.Identity.Name
是所讨论的用户名
User.IsInRole(“纳税人”)
返回false。下面,当我运行aspnet_db storage proc时,它表示返回的列表中的用户

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
所以现在我想知道这是否是一个数据问题。有什么想法吗?

第二种方法

[Authorize(Roles="myrolename")]
这是正确的。如果用户没有该角色,则行为是提示他们使用具有访问权限的角色登录。如果您想更改该行为,则必须滚动您自己的授权筛选器。

第二种方法

[Authorize(Roles="myrolename")]

这是正确的。如果用户没有该角色,则行为是提示他们使用具有访问权限的角色登录。如果要更改该行为,则必须滚动您自己的授权筛选器。

如果访问页面的用户未经身份验证或不是给定角色的成员(您的第二个选项是我使用的),则他们将被重定向到身份验证页面。这是一个筛选器,不是授权。

如果访问页面的用户未经身份验证或不是给定角色的成员(您的第二个选项是我使用的),则他们将被重定向到身份验证页面。这是一个筛选器,而不是授权。

我的测试用户处于该角色,当我使用“[Authorize(Roles=“纳税人”)]”时,我登录,然后继续返回登录屏幕。在我广泛使用此结构时,请仔细检查它,没有问题。@Lazarus这导致了预期的结果,但没有意义
[Authorize(Roles=“”)]
@Doug Chamberlain-这在语义上与
[Authorize]
相同,即用户只需要经过身份验证。创建一个新角色,将您的用户添加到其中,相应地更改您的
Authorize
属性,然后重新启动您的站点,让我们确保这里没有流氓元素。我在一个已经运行了一年多没有问题的生产站点中使用了这个(和其他许多站点一样),它的工作方式完全符合您的想象。我要补充的是,我没有在Home Controller上这样做,我也不会想象您会想这样做。您是否尝试过将授权限制为您想要保护的方法,而不是整个家庭控制器?我的测试用户处于该角色中,当我使用“[Authorize(Roles=“纳税人”)]”时,我登录,继续回到登录屏幕。仔细检查,因为我广泛使用这种结构,没有问题。@Lazarus这导致了预期的结果,但没有意义
[Authorize(Roles=“”)]
@Doug Chamberlain-这在语义上与
[Authorize]
相同,即用户只需要经过身份验证。创建一个新角色,将您的用户添加到其中,相应地更改您的
Authorize
属性,然后重新启动您的站点,让我们确保这里没有流氓元素。我在一个已经运行了一年多没有问题的生产站点中使用了这个(和其他许多站点一样),它的工作方式完全符合您的想象。我要补充的是,我没有在Home Controller上这样做,我也不会想象您会想这样做。您是否尝试过将授权限制为您想要保护的方法,而不是整个家庭控制器?