Browse Source

[Authentication] Return details when user token authentication fails

develop
Robin Thoni 9 years ago
parent
commit
0895501cba
1 changed files with 16 additions and 15 deletions
  1. 16
    15
      Authentication/Business/AuthFilter.cs

+ 16
- 15
Authentication/Business/AuthFilter.cs View File

1
 using System.Collections.Generic;
1
 using System.Collections.Generic;
2
 using System.Linq;
2
 using System.Linq;
3
+using System.Net;
4
+using System.Net.Http;
3
 using System.Web.Http;
5
 using System.Web.Http;
4
 using System.Web.Http.Controllers;
6
 using System.Web.Http.Controllers;
7
+using System.Web.Http.Filters;
5
 using iiie.Logs.DataAccess;
8
 using iiie.Logs.DataAccess;
6
 using iiie.Logs.DBO;
9
 using iiie.Logs.DBO;
7
 
10
 
10
     /// <summary>
13
     /// <summary>
11
     /// Filter for controllers methods
14
     /// Filter for controllers methods
12
     /// </summary>
15
     /// </summary>
13
-    public class AuthFilter : AuthorizeAttribute
16
+    public class AuthFilter : ActionFilterAttribute
14
     {
17
     {
15
         /// <summary>
18
         /// <summary>
16
         /// Authorized roles to access this method
19
         /// Authorized roles to access this method
26
             UserRoles = roles.ToList();
29
             UserRoles = roles.ToList();
27
         }
30
         }
28
 
31
 
29
-        /// <summary>
30
-        /// Check if user can access this method
31
-        /// </summary>
32
-        /// <param name="context">HTTP request context</param>
33
-        /// <returns>True if user can access, false otherwise</returns>
34
-        protected override bool IsAuthorized(HttpActionContext context)
32
+        public override void OnActionExecuting(HttpActionContext actionContext)
35
         {
33
         {
34
+            base.OnActionExecuting(actionContext);
36
             if (!UserRoles.Any())
35
             if (!UserRoles.Any())
37
-                return true;
36
+                return;
37
+            OpResult<bool> error = null;
38
             if (UserStorage.BasicUserDbo == null)
38
             if (UserStorage.BasicUserDbo == null)
39
             {
39
             {
40
-                OpResult<bool>.Error(ResultStatus.PermissionError, "User is not recognized. Missing token?").Log();
41
-                return false;
40
+                error = OpResult<bool>.Error(ResultStatus.PermissionError, "User is not recognized. Missing token?", "").Log();
41
+            }
42
+            else if (!UserRoles.Contains(UserStorage.BasicUserDbo.Role))
43
+            {
44
+                error = OpResult<bool>.Error(ResultStatus.PermissionError, string.Format("User has role {0}, but only {1} are allowed",
45
+                    UserStorage.BasicUserDbo.Role, string.Join(",", UserRoles.Select(x => x.ToString()))), "Permission denied").Log();
42
             }
46
             }
43
-            if (!UserRoles.Contains(UserStorage.BasicUserDbo.Role))
47
+            if (error != null)
44
             {
48
             {
45
-                OpResult<bool>.Error(ResultStatus.PermissionError, string.Format("User has role {0}, but only {1} are allowed",
46
-                    UserStorage.BasicUserDbo.Role, string.Join(",", UserRoles.Select(x => x.ToString())))).Log();
47
-                return false;
49
+                actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized, error.PublicDetails);
48
             }
50
             }
49
-            return true;
50
         }
51
         }
51
     }
52
     }
52
 }
53
 }

Loading…
Cancel
Save