/*
* 版权声明 .
* 此文档的版权归通联支付网络服务有限公司所有
* Powered By [Allinpay-Boss-framework]
*/
package com.allinpay.its.boss.system.permission.service;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import com.allinpay.its.boss.framework.utils.JsonUtil;
import com.allinpay.its.boss.framework.utils.Page;
import com.allinpay.its.boss.framework.utils.WebConstant;
import com.allinpay.its.boss.system.permission.dao.IFrameworkSysPermissionDao;
import com.allinpay.its.boss.system.permission.dao.impl.FrameworkSysPermissionDaoImpl;
import com.allinpay.its.boss.system.permission.model.ActionCheck;
import com.allinpay.its.boss.system.permission.model.FrameworkSysAction;
import com.allinpay.its.boss.system.permission.model.FrameworkSysPermission;
import com.allinpay.its.boss.system.permission.model.PermissionCode;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
// 默认将类中的所有函数纳入事务管理.
@Transactional
public class FrameworkSysPermissionServiceImpl {
@Autowired
private IFrameworkSysPermissionDao frameworkSysPermissionDao;
@Resource
private FrameworkSysPermissionDaoImpl myBatisDao;
@Resource
private FrameworkSysActionServiceImpl sysActionService;
/**
* 新增
*
* @param POJO对象
* @return String
*/
public String add(FrameworkSysPermission frameworkSysPermission) {
// 保存申请信息
frameworkSysPermission.setState(WebConstant.DATA_EXIST);
myBatisDao.save(frameworkSysPermission);
return null;
}
/**
* 删除
*
* @param POJO对象
* @return String
*/
public String delete(int pk_id) {
myBatisDao.deleteById(pk_id);
return null;
}
/**
* 新增修改 有唯一主键,且主键自动生成不可编辑时
*
* @param POJO对象
* @return String
*/
// public String saveOrUpdate(FrameworkSysPermission frameworkSysPermission)
// {
//
// // 保存申请信息
// if(frameworkSysPermission.getPk() != null)
// frameworkSysPermissionDao.update(frameworkSysPermission);
// else
// frameworkSysPermissionDao.save(frameworkSysPermission);
//
// return null;
// }
/**
* 新增修改
*
* @param POJO对象
* @return String
*/
public String update(FrameworkSysPermission frameworkSysPermission) {
// 保存申请信息
myBatisDao.update(frameworkSysPermission);
return null;
}
/**
* 分页查询
*
* @param POJO对象
* @param pageIndex
* 当前页页数
* @param pageSize
* 每页记录数
* @return Page
*/
public Page findFrameworkSysPermissions(
FrameworkSysPermission frameworkSysPermission, int pageIndex,
int pageSize) {
return myBatisDao.pageBy(null, null, frameworkSysPermission, pageIndex,
pageSize);
}
/**
* 根据主键对象获取信息
*
* @param POJO对象
* @return FrameworkSysPermission
*/
public List<FrameworkSysPermission> getFrameworkSysPermissionListByObj(
FrameworkSysPermission frameworkSysPermission) {
return frameworkSysPermissionDao.findListByObj(frameworkSysPermission);
}
/**
* 根据主键获取信息
*
* @param POJO对象
* @return FrameworkSysPermission
*/
public FrameworkSysPermission getFrameworkSysPermissionByPk(int pk_Id) {
return frameworkSysPermissionDao.findByPKId(pk_Id);
}
/**
* 根据条件获取信息
*
* @param POJO对象
* @return FrameworkSysPermission返回第一个符合条件的对象,适合条件能唯一定位记录的应用场景
*/
public List<FrameworkSysPermission> getFrameworkSysPermissionListBySql(
FrameworkSysPermission frameworkSysPermission) {
return frameworkSysPermissionDao.findListBySqlId(
"selectFrameworkSysPermissions", frameworkSysPermission);
}
/**
*
* Description: 类似白名单,如果Action表中没有相应配置则默认通过
*
* @return
* @param reqActionName
* @param methodname
* @param clsName
* @return
*/
public ActionCheck checkActionAccess(String reqActionName,
String methodname, String clsName) {
ActionCheck actionCheck = new ActionCheck(false, "");
// 在从缓存中取所有Action信息
List<FrameworkSysAction> bossSysActionLists = (List<FrameworkSysAction>) sysActionService
.getFrameworkSysActionListByObj(null);
if (bossSysActionLists != null && !bossSysActionLists.isEmpty()) {
boolean b = false;
for (FrameworkSysAction action : bossSysActionLists) {
if (StringUtils.equals(reqActionName, action.getActionName())
&& StringUtils.equals(methodname,
action.getMethodName())
&& StringUtils.equals(clsName,
action.getSimpleClassName())) {
b = true;// 这个请求action存在Action配置表中
actionCheck.setActionDesc(action.getActionDes());
}
}
if (!b) { // 如果不存在配置表中直接允许通过
actionCheck.setAccess(true);
}
}
return actionCheck;
}
/**
*
* Description: 查询该用户是否有访问Action的权限
*
* @return
* @param userId
* @param reqActionName
* @param methodname
* @param clsName
* @return
*/
public ActionCheck checkActionAccessByUserId(String userId,
String reqActionName, String methodname, String clsName) {
ActionCheck actionCheck = new ActionCheck(false, "");
// 先直接从缓存中取该用户的所有权限编码
// List<String> pCodeList = MbMchtConfig.getPCodeByUserId(userId);
List<FrameworkSysPermission> permitList = frameworkSysPermissionDao
.getPermListByUserIdOrMenuId(Integer.parseInt(userId), 0);
List<String> pCodeList = new ArrayList<String>();
if (permitList != null && permitList.size() > 0) {
for (FrameworkSysPermission per : permitList) {
pCodeList.add(per.getPermissionCode());
}
}
if (pCodeList != null && !pCodeList.isEmpty()) {
// 在从缓存中取所有Action信息
// List<BossSysAction> bossSysActionLists =
// MbMchtConfig.getAllBossSysAction();
List<FrameworkSysAction> bossSysActionLists = (List<FrameworkSysAction>) sysActionService
.getFrameworkSysActionListByObj(null);
if (bossSysActionLists != null && !bossSysActionLists.isEmpty()) {
for (FrameworkSysAction action : bossSysActionLists) {
for (String pCode : pCodeList) {
if (StringUtils.equals(pCode,
action.getPermissionCode())
&& StringUtils.equals(reqActionName,
action.getActionName())
&& StringUtils.equals(methodname,
action.getMethodName())
&& StringUtils.equals(clsName,
action.getSimpleClassName())) {
actionCheck.setAccess(true);
actionCheck.setActionDesc(action.getActionDes());
}
}
}
}
}
return actionCheck;
}
/**
* 通过当前用户获得该用户的所有权限编码到前台进行页面元素过滤
*
* @param request
*/
public String getPermissionCodeByUserId(Long userId) {
List<PermissionCode> permList = null;
// 取得当前用户所拥有的权限编码
List<FrameworkSysPermission> userPermitList = frameworkSysPermissionDao
.getPermListByUserIdOrMenuId(userId.intValue(), 0);
if (userPermitList != null && !userPermitList.isEmpty()) {
permList = new ArrayList<PermissionCode>();
for (FrameworkSysPermission permission : userPermitList) {
permList.add(new PermissionCode(permission.getPermissionCode(),
permission.getPermissionName()));
}
}
return JsonUtil.toJSONStrByObject(permList);
}
public List<FrameworkSysPermission> getPermListByUserIdOrMenuId(int userId,int menuId){
return frameworkSysPermissionDao
.getPermListByUserIdOrMenuId(userId, menuId);
}
}