处理控制器操作授权的替代方法,而不是使用customattribute

时间:2017-04-20 15:34:25

标签: asp.net-mvc asp.net-web-api authorization asp.net-web-api2

我有webapi动作,用customauthattribute进行授权。如果当前用户具有viewcustomer权限,则此属性在内部检查db。有没有人知道更好的处理方式而不是使用customattribute。可能正在拦截所有请求并对他尝试访问的用户/权限/资源运行授权检查:例如,客户ID为10的getcustomer。因此,如果用户没有访问权限,请查看客户ID 10,他应该获得403状态。

[CheckPermission(Process.CustomerManagment,Permissions.View)]
public IHttpActionResult GetCustomer(int customerId)
{
}

2 个答案:

答案 0 :(得分:0)

您可以在网络API配置中添加全局过滤器。

实际上在您的启动类(startup.cs或webapi.config)中,您可以使用以下方法调用httpconfiguration对象

        var config = new HttpConfiguration();
        config.Filters.Add(new MyAuthFilterAttribute());

通过这种方式,它将是您所有api呼叫的全局。

您应该扩展IAuthenticationFilter接口。

在这里查看文档 webapi documentation

答案 1 :(得分:0)

一种选择是创建一个可以全局应用的过滤器。例如,像这样的东西。是的,这很可怕但是给你一个开始:

$scope.gridOptions.exporterPdfFooter = {
        margin: [10, 5, 20, 10],    
        table: {

            widths: [ '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%',],

            body: [
                    [ '', {text: ($scope.getFooterValue(1)), alignment: 'right'}, {text: ($scope.getFooterValue(2)), alignment: 'right'}, {text: ($scope.getFooterValue(3)), alignment: 'right'}, {text: ($scope.getFooterValue(4)), alignment: 'right'}, {text: ($scope.getFooterValue(5)), alignment: 'right'}, {text: ($scope.getFooterValue(6)), alignment: 'right'} ],

            ]         
        }
    };

现在,您可以在public class GlobalAuthoriseAttribute : AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) { var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName; var actionName = filterContext.ActionDescriptor.ActionName; switch (controllerName) { case "Home": //All call to home controller are allowed return; case "Admin": filterContext.Result = new HttpUnauthorizedResult(); return; } } } 文件中将其添加到整个应用中:

App_Start\FilterConfig.cs