【发布时间】:2017-02-23 02:14:19
【问题描述】:
我非常感谢一些建议,以帮助我进行对象缓存。 这是我的需求:我想根据存储在 SQL 数据库中的用户角色过滤控制器的一些操作。
我现在正在做的是:当当前用户的第一个请求完成时,我会生成一个具有一些由 SQL 查询初始化的属性的对象。我正在使用自定义提供程序将此对象存储到会话中,并且我正在使用自定义角色提供程序来处理授权过滤器标签。如果会话过期用户被重新生成.. 它是这样的(简化):
用户类
Public class User
public property Login as string
public property IsAdmin as boolean
public sub Init(byval pLogin as string)
Login = pLogin
//Do some logic on database to provides roles....
IsAdmin = dbReturnIsAdmin
end sub
public readonly property RolesList as string()
Get
Return New String() {If(IsAdmin, "UserIsAdmin", "")}
End get
end property
End class
会话用户提供者
Public Class SessionProvider
Private Const SESSION_USER As String = "SESSION_USER"
Public Shared Sub ReloadUser()
//'This instruction initiate user and load roles into an User class type object
HttpContext.Current.Session(SESSION_USER) = StructureService.GetInitializedUser(My.User.Name, UowProvider.StructureUow)
End Sub
Public Shared ReadOnly Property User() As Application.User
Get
//'If user doesn't exist so we create an user
If HttpContext.Current.Session(SESSION_USER) Is Nothing Then ReloadUser()
//'Return user
Return CType(HttpContext.Current.Session(SESSION_USER), Application.User)
End Get
End Property
End Class
自定义角色提供者
Public Class AuthentifiedRoleProvider
Inherits RoleProvider
//Implement base role provider....
Public Overrides Function GetRolesForUser(username As String) As String()
return SessionProvider.User.RolesList
End Function
End Class
实施 - WebConfig
<system.web> .....
<roleManager cacheRolesInCookie="false" defaultProvider="DefaultRoleProvider" enabled="true">
<providers>
<clear />
<add name="DefaultRoleProvider" type="AuthentifiedRoleProvider" />
</providers>
</roleManager>
</system.web>
实现 - 控制器
<Authorize(Roles:="UserIsAdmin")>
Public Function List_Items() As ActionResult
Return View()
End Function
它正在工作......
但是,我想知道这是否真的是实现这一目标的好方法。 由于我的应用程序上有一个站点地图引用控制器操作,因此每次菜单加载都会请求 sessionprovider 用户(顺便说一下 http 会话)4 或 5 次。
所以,我的问题是:
- 存储到会话中会带来性能问题吗?
- 有没有更好的方法将我的用户对象存储到一种缓存中(--> 我想到了 system.runtime.cache)。
- 不管怎样,你认为这个实现对实现我的目标有好处吗?
非常感谢!
【问题讨论】:
标签: asp.net-mvc session caching mvcsitemapprovider