登录权限之过滤器

1、首次加载页面时,先调用(基类控制器)BaseContoller : Controller; 注意:循环查找Home控制器中index的方法
2、访问/admin/login时 无需AdminAuthFilter(登录状态过滤器)和PermissionActionFilterAttribute(权限验证过滤器)
a.先加载LoginController构造方法中ISysUserService,IAdminAuthService接口实例化,再访问控制器基类BaseContoller ,再访问LoginController方法。
b.访问Route("login")的action方法LoginIndex
3、点击登录:先加载LoginController构造方法,再调用getSalt(密码盐),然后调用LoginIndex(登录方法)
a.通过获取密码盐(数据库中)与输入框密码组合MD5加密后,与数据库中(MD5加密的登录密码)对比校验。
b.登录密码校验成功后,将登录token,用户名称保存到“登录方案CookieAdminAuthInfo.AuthenticationScheme”【注意:每次登录成功后,token不断变化】
4、登录成功后,进入首页,先走“IResourceFilter”过滤器中OnResourceExecuting(执行前action)
a.先在“IResourceFilter”过滤器中OnResourceExecuting中调用引擎IAdminAuthService中“当前用户”并校验状态。
b.校验通过后,进入控制器MainController(先访问其基类BaseContoller和PublicAdminController【[AdminAuthFilter] //登录状态过滤器,注意:构造方法中注入IWorkContext】)
c.然后进入Index方法。接着加载视图界面(获取当前用户,当前用户所属角色,当前用户角色的所有菜单列表)
d.之后,调用IResourceFilter过滤器OnResourceExecuted中方法
5、用户列表:
a.先调用IResourceFilter过滤器中OnResourceExecuting方法,再访问UserController构造函数
b.再调用用户列表action之前先IActionFilter的OnActionExecuting(验证允许匿名访问和权限验证),权限验证-》当前controller和action是否已授权该用户
c.跳转到用户列表action(UserIndex)
d.加载完成用户列表action(UserIndex),再调用IActionFilter的OnActionExecuted(执行后方法)
e.加载视图界面后(校验各个按钮等权限),再访问IResourceFilter过滤器的OnResourceExecuted事件
6、点击退出:
a.先调用IResourceFilter过滤器中OnResourceExecuting方法,再访问MainController构造函数
b.调用退出action(SignOut退出)
c.再访问IResourceFilter过滤器的OnResourceExecuted事件
d.再加载LoginController构造函数【无需AdminAuthFilter(登录状态过滤器)和PermissionActionFilterAttribute(权限验证过滤器)】

注意:
(1)AdminAreaController:无需AdminAuthFilter(资源过滤器)和PermissionActionFilterAttribute(action过滤器)
(2)PublicAdminController: 只验证AdminAuthFilter(资源过滤器) 目前只支持“首页”和“退出”
(3)AdminPermissionController:包含AdminAuthFilter(资源过滤器)和PermissionActionFilterAttribute(action过滤器)

总结:
(一)IActionFilter资源过滤器:只在执行action前后执行。
(二)IResourceFilter资源过滤器 :加载控制器之前,视图界面加载完成之后。

猜你喜欢

转载自www.cnblogs.com/lvjy-net/p/10414452.html