我有webapi动作,用customauthattribute进行授权。如果当前用户具有viewcustomer权限,则此属性在内部检查db。有没有人知道更好的处理方式而不是使用customattribute。可能正在拦截所有请求并对他尝试访问的用户/权限/资源运行授权检查:例如,客户ID为10的getcustomer。因此,如果用户没有访问权限,请查看客户ID 10,他应该获得403状态。
[CheckPermission(Process.CustomerManagment,Permissions.View)]
public IHttpActionResult GetCustomer(int customerId)
{
}
答案 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