我经常使用创建从 AuthorizeAttribute 类派生的自定义权限类。这是您可以在任何控制器操作上创建自定义权限过滤器的一种方式。
public MyPermissionsFilter : AuthorizeAttribute
{
private readonly string _permissionName;
public PermissionsFilter(string permissionName)
{
_permissionName = permissionName;
}
}
覆盖 OnAuthorization 方法。
public override void OnAuthorization(AuthorizationContext filterContext)
{
//Perform Check with _permissionName
//Redirect to error / unauthorised
}
然后装饰你的控制器动作。
[HttpPost]
[PermissionsFilter("PermissionName")]
public void SaveFile(HttpPostedFileBase file)
{
//Do file stuff
}
我希望这就是您想要的并且对您有所帮助。
补充:我已将 GetFile 重命名为 SaveFile.. 这就是应该的。
我也一直在考虑这个问题,它可能不是你的最佳解决方案。如果您需要根据其 GUID 检查用户访问单个文件的权限,最好在接收文件基本参数的 SaveFile 方法中调用安全检查。您可以从文件名中获取 guid,然后传递给权限检查。如果失败,则只需重定向到适当的视图。