C# 限制对MVC操作的访问

C# 限制对MVC操作的访问,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个ASP.NETMVC网站,在那里我建立了一个权限系统。例如,当当前用户没有足够的权限时,某些链接被隐藏。但是,如果他们手动键入该链接的URL,他们仍然可以访问该内容 我知道我可以使用[Authorize]属性来阻止没有正确用户角色的用户,但是我如何实现自己的属性来阻止不符合自定义要求的用户的操作,无需在每个操作中写入手动检查?您可以编写自定义的Authorize属性并覆盖AuthorizeCore方法,您可以在其中放置自定义授权逻辑: public class MyAuthorizeAt

我有一个ASP.NETMVC网站,在那里我建立了一个权限系统。例如,当当前用户没有足够的权限时,某些链接被隐藏。但是,如果他们手动键入该链接的URL,他们仍然可以访问该内容


我知道我可以使用
[Authorize]
属性来阻止没有正确用户角色的用户,但是我如何实现自己的属性来阻止不符合自定义要求的用户的操作,无需在每个操作中写入手动检查?

您可以编写自定义的
Authorize
属性并覆盖
AuthorizeCore
方法,您可以在其中放置自定义授权逻辑:

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var authroized = base.AuthorizeCore(httpContext);
        if (!authroized)
        {
            return false;
        }

        // at this stage the base authorization process has passed.
        // now implement your custom authorization logic and return true or false

        // here you have access to the HttpContext and as a consequence to all
        // request and route parameters so you could implement any 
        // authorization logic you want

        // And of course if you want a completely custom authorization logic 
        // ignoring the base functionality don't call the base method above
        // but completely override anything here
    }
}

现在只需使用此自定义属性装饰相应的控制器/操作。

如果您使用ASP.NET成员身份,则可以配置RoleProvider并为用户提供角色

然后,可以使用authorized属性上的Roles属性检查角色

[Authorize(Roles="Admin, SuperUser")]

谢谢,我正在使用ASP.NET成员资格和“授权”属性。但是这两个问题都没有回答上面关于处理自定义标准的问题。为什么没有呢?您正在考虑继承MembershipProvider。还要研究继承RoleProvider,并将其作为RoleManager添加到web.config中。这样,您就可以创建自己的角色,并重定向到“拒绝访问”或其他任何您不希望出现的角色。好吧,我不是在考虑继承MembershipProvider。我只是想提供类似的功能,除了一些自定义逻辑,这些逻辑不能直接映射到我的用户角色列表。而且我没有直接映射到我的角色的选项,因为我也在使用成员角色。我将把这个留给其他可能会从中受益的人,但由于您正在进行自定义授权,@Darin的回答是最好的。谢谢Darin。唯一的问题是,我的过滤器可能需要与AuthorizeAttribute结合使用(两个属性都使用,但值不同)。直接从
FilterAttribute
派生是否存在问题?是的,您可以从
FilterAttribute
派生,还可以通过将自定义授权逻辑放入
OnAuthorization
方法来实现
IAAuthorizationFilter
接口。