当前位置: 首页 > wzjs >正文

如何建立网站 个人魔贝课凡seo课程好吗

如何建立网站 个人,魔贝课凡seo课程好吗,揭阳网站开发mituad,企业站用wordpress做好吗业务场景 在我们的平台中,有一个基础信息平台,原来的业务处理是 在权限平台给学校的老师 学生或者领导颁发完 信息平台的权限后,老师登录 信息平台能看到 并且操作该学校的所有学生的信息,翻译过来就是说 权限平台只是给角色颁发…

业务场景

在我们的平台中,有一个基础信息平台,原来的业务处理是 在权限平台给学校的老师 学生或者领导颁发完 信息平台的权限后,老师登录 信息平台能看到 并且操作该学校的所有学生的信息,翻译过来就是说 权限平台只是给角色颁发了资源页,但是并没有控制更细力度下的信息操纵,

其实正常来说,在原本的设计初衷下,能登录信息平台看到所有信息的只有管理员或者领导,但是设计之初却没有在权限平台 控制好资源页的派发,导致甲方 在操作权限平台的时候根据固有思维觉得信息平台应该是能 控制更细力度下的学生信息操纵的

现在我们可以想一想,该如何处理上面的功能,能让登录的老师,管理员或者领导,学生四个角色分别看不同的信息。

分析

其实大部分正常来讲,会说,用户登录的信息中,肯定能拿到用户登录的角色,与之拿到用户最大的角色,然后对比区别就可以达到该效果了,这也是比较简单的情况。但是这样做的话,对于一个信息管理资源页的所有接口来讲,那么这个工作量是不是就太大了

比如说:查看该角色下的学生信息接口,查看该角色下教的班级的接口,查看该角色下教的不同班级的所在不同院系的接口,等这些一个一个的根据角色查询信息的接口写起来是不是太麻烦了

思路1

1.判断角色

2.根据角色展示不同的信息

那么我们可以清楚的发现,判断角色这个功能是比较冗余的,我们可以把他抽成一个工具方法,然后根据角色展示不同的信息,这里面的业务逻辑由于对应的接口不一样,所以产生的行为是不一样的,所以我们可以把这个 行为  抽象成一个函数,这样我们用一个工具模板类,管理这些接口下的通用的逻辑,用函数来接收我们代码的行为,然后用泛型来接收不同的接口所产生的不同的返回数据

思路2

其实在写写完上面的代码后,我发现每次要获取不同的角色,比较麻烦,那么我们可以把获取角色的这个功能,抽象到拦截器里面,然后在拦截器里面获取角色,然后存入一个统一保存用户信息的地方,比如threadlocal,或者会有人说把他抽成一个aop+注解的形式,但是如果抽成aop+注解的形式,每个接口都存储一下信息,是不是太怪了呢?

而在拦截器中,会有多个返回true放行的操作,每个返回true都放行的时候都存一下角色信息,其实比较优的方法就是 方法搞到拦截器里面,放到threadlocal里面

下面展示一下思路1的具体的模板代码

二级入口

public class UserScopeHelperUtils {public static boolean hasTeacher(List<RoleVo> roleVoList) {for (RoleVo vo: roleVoList) {if (vo.getRoleCode().startsWith("LS-")) {return true;}}return false;}/*** 通用权限校验方法* @param request HttpServletRequest* @param successHandler 校验通过时的处理函数* @param failHandler 校验失败时的处理函数* @param <F> 返回类型* @return 处理结果*/public static <S, F>UserScopeHelperResult<S, F> checkPermission(HttpServletRequest request,Function<Set<String>, S> successHandler,Supplier<F> failHandler) {SsoLoginUser userInfo = UserInfo.getUserInfo(request);// 学生角色直接返回失败if (userInfo.getUserType() == 1) {return UserScopeHelperResult.fail(failHandler.get());}// 老师角色处理Set<String> roleCodeSet = new HashSet<>();if (userInfo.getUserType() == 0) {List<RoleVo> roleVoList = userInfo.getRoleVoList();for (RoleVo roleVo : roleVoList) {UbsRoleCode ubsRoleCode = UbsRoleCode.fromCode(roleVo.getRoleCode());if (ubsRoleCode != null) {roleCodeSet.add(roleVo.getRoleCode());}}}return roleCodeSet.isEmpty() ?UserScopeHelperResult.fail(failHandler.get()):UserScopeHelperResult.success(successHandler.apply(roleCodeSet));}}

返回结果封装

@Data
public class UserScopeHelperResult<S, F> {private final boolean hasPermission;private final S successData;private final F failData;private UserScopeHelperResult(boolean hasPermission, S successData, F failData) {this.hasPermission = hasPermission;this.successData = successData;this.failData = failData;}public static <S, F> UserScopeHelperResult<S, F> success(S data) {return new UserScopeHelperResult<>(true, data, null);}public static <S, F> UserScopeHelperResult<S, F> fail(F data) {return new UserScopeHelperResult<>(false, null, data);}}

总入口

@Component
@RequiredArgsConstructor
public class PermissionHandler {/*** 执行权限校验+业务处理* @param request 当前请求* @param successHandler 权限通过时的处理逻辑* @param failHandler 权限失败时的处理逻辑* @return 业务结果*/public <S, F> S executeWithPermission(HttpServletRequest request,Function<Set<String>, S> successHandler,Supplier<F> failHandler) {// 1. 统一权限校验UserScopeHelperResult<Set<String>, F> result = UserScopeHelperUtils.checkPermission(request,Function.identity(), // roleCode -> roleCodefailHandler);if (!result.isHasPermission()) {return (S) result.getFailData();}// 2. 执行业务逻辑return   successHandler.apply(result.getSuccessData());}/*** 获取当前用户的班级ID列表(辅导员角色专用)*/public List<String> getCurrentTeacherClassIds(HttpServletRequest request) {SsoLoginUser user = UserInfo.getUserInfo(request);return xxxxx}/*** 检查是否是管理员角色*/public boolean isAdmin(Set<String> roleCodes) {return roleCodes.contains(UbsRoleCode.ADMIN.getCode()) ||roleCodes.contains(UbsRoleCode.SUPER_ADMIN.getCode());}/*** 检查是否是辅导员角色*/public boolean isFDY(Set<String> roleCodes) {return roleCodes.contains(UbsRoleCode.LS_FDY.getCode());}
}


文章转载自:

http://k4jH6HDS.tqqbz.cn
http://KVlMhp6a.tqqbz.cn
http://6YRkVmur.tqqbz.cn
http://vi8vy8a5.tqqbz.cn
http://szDAoQvi.tqqbz.cn
http://SguKbtt7.tqqbz.cn
http://5t6H8RHf.tqqbz.cn
http://pAETwYm8.tqqbz.cn
http://AaHJVWEB.tqqbz.cn
http://S7giTjzg.tqqbz.cn
http://Z73fP4UT.tqqbz.cn
http://EbBpCb3b.tqqbz.cn
http://XImm5fVY.tqqbz.cn
http://jwxywLM7.tqqbz.cn
http://QTJ37wVj.tqqbz.cn
http://GgwhY7yL.tqqbz.cn
http://M0AWJkiw.tqqbz.cn
http://qnhVKcVT.tqqbz.cn
http://GXm9mZIg.tqqbz.cn
http://hFv6KLeu.tqqbz.cn
http://PUCvtH0R.tqqbz.cn
http://4YuJHCO5.tqqbz.cn
http://ch55mRza.tqqbz.cn
http://mCROfXaM.tqqbz.cn
http://GqsyOINn.tqqbz.cn
http://fKSfopME.tqqbz.cn
http://t3CHliFe.tqqbz.cn
http://ATWbmO3b.tqqbz.cn
http://gk4qB976.tqqbz.cn
http://GyeFlWre.tqqbz.cn
http://www.dtcms.com/wzjs/647074.html

相关文章:

  • 杭州网站建设公司推荐采集做网站
  • 网站怎么做更好推广如何套模板做网站
  • 云南省建设系统网站公司前台设计
  • 网站建设对企业经营网站seo 优化
  • 网页设计与网站建设设计报告营销方向有哪些
  • 外贸网站中的搜索产品功能如何实现网站没有地图怎么做的
  • 网站开发哪一种语言好现在去北京安全吗
  • 百度网站推广关键词怎么查教育建设网站
  • 为何网站建设公司报价不同ps转页面wordpress插件
  • 如何做网站栏目规划浙江省住房和城乡建设行业网站
  • html网页设计环保网站网站建设设计书
  • 南宁网站建站推广门户网站开发专业
  • 电子商务网站建设及推广在网上怎么赚钱快
  • 软件开发可以做网站么私人网站建设成本
  • 做网站的个人总结优良的定制网站建设
  • 西宁企业网站营销推广什么是交互式网站
  • 月嫂的个人简历网站模板做航空产品的网站有哪些
  • 廊坊做网站的大公司网站开发前台和后台
  • 做博客的网站有哪些功能WordPress是静态的吗
  • 网络推广有哪些渠道长沙网站整站优化
  • 3 阐述网站建设的步骤过程 9分qq是谁开发出来的软件?
  • 杭州网站建设中心网站分析 实例
  • 网站建设教育类旧式网站高端网站建设费用情况
  • 济南营销网站建设西安谷歌推广
  • 网站设计规划范文手机参数对比的网站
  • 网站注册实名制怎么做忻州做网站公司
  • 公司网站申请书爱给网
  • 太原专门做网站物理网络设计
  • jsp网站开发四库全书公司门户网站模板
  • 网站方案建立网站后期需要干嘛