In this post i am going to explain how to create your own custom authorization in asp.net MVC there are lots of resources about this on internet but i found this by my own way so may be its help you to solve your problem,In this example i am going to use IAuthorizationFilter interface for define my own custom attribute for MVC Controller and actions.
Step:1 Create Authorization Class
Imports System.Web.Mvc
Imports _of = StructureMap.ObjectFactory
Public Class Authorization
Inherits FilterAttribute
Implements IAuthorizationFilter
Private _roles() As OpenIDUser.Roles
Sub New(ByVal ParamArray roles() As OpenIDUser.Roles)
_roles = roles
End Sub
Public Sub OnAuthorization(ByVal filterContext As System.Web.Mvc.AuthorizationContext) Implements System.Web.Mvc.IAuthorizationFilter.OnAuthorization
Dim session = filterContext.HttpContext.Session
Dim u As OpenIDUser = Session("CurrentUser")
Dim IsLoggedIn As Boolean = Session("IsLoggedIn")
If IsLoggedIn Then
Dim UserRoleIds As List(Of Short) = u.UserRoles.Select(Function(ur) ur.RoleID).ToList
For Each r In _roles
If Not UserRoleIds.Contains(r) Then
filterContext.Result = New RedirectResult("~/Account/Openidlogin")
End If
Next
Else
filterContext.Result = New RedirectResult("~/Account/Openidlogin?returnUrl=" & filterContext.HttpContext.Request.Url.ToString)
End If
End Sub
End Class
Authorization class is derived from FilterAttributeso we can use this class as controller and actions attribute and Implements IAuthorizationFilter that contain Method OnAuthorization which fire before Action executes so we can put our authorization logic in side that method.
In OnAuthorization method we get this current user from session,which we would create when user login and also one key IsLoggedIn we put in session when user logged in. that we get here and check if user IsLoggedIn then in next step we get user roles that we are going to pass through Attribute when define on Action Methods and check user's roled available in roles that we passed if not then we set this Result property of filtercontext to new Redirect result that redirect user to login view.
Step:2 Use Authorization class as action or controller attribute.
Public Class TestController
Inherits System.Web.Mvc.Controller
<Authorization(OpenIDUser.Roles.Authorized, OpenIDUser.Roles.User)> _
Function AuthorizationNeeded() As ViewResult
'Add code here
End Function
End Class
Now test this action with implementation of session.this also work in whole controller.
