package com.whereta.service.impl;
import com.whereta.dao.*;
import com.whereta.model.Menu;
import com.whereta.model.Permission;
import com.whereta.model.Role;
import com.whereta.service.IPermissionService;
import com.whereta.vo.PermissionCreateVO;
import com.whereta.vo.PermissionEditVO;
import com.whereta.vo.ResultVO;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
/**
* @author Vincent
* @time 2015/8/28 9:45
*/
@Service("permissionService")
public class PermissionServiceImpl implements IPermissionService {
@Resource
private IPermissionDao permissionDao;
@Resource
private IRolePermissionDao rolePermissionDao;
@Resource
private IMenuPermissionDao menuPermissionDao;
@Resource
private IMenuDao menuDao;
@Resource
private IRoleDao roleDao;
/**
* 删除权限
*
* @param perId
* @return
*/
public ResultVO delPermission(int perId) {
ResultVO resultVO = new ResultVO(true);
//获取所有权限
List<Permission> permissionList = permissionDao.selectAll();
Permission permission = permissionDao.get(permissionList, perId);
if (permission == null) {
resultVO.setOk(false);
resultVO.setMsg("权限不存在");
return resultVO;
}
//查看是否有权限
Subject subject = SecurityUtils.getSubject();
if (!subject.isPermitted(permission.getKey())) {
resultVO.setOk(false);
resultVO.setMsg("您没有操作权限");
return resultVO;
}
//判断是否是根级权限
//获取我拥有的权限
List<Permission> myPermissionList = new ArrayList<Permission>();
for (Permission p : permissionList) {
String key = p.getKey();
boolean permitted = subject.isPermitted(key);
if (permitted) {
myPermissionList.add(p);
}
}
List<Permission> rootPermissions = getRootPermissions(myPermissionList);
for (Permission p : rootPermissions) {
if (p.getId().intValue() == perId) {
resultVO.setOk(false);
resultVO.setMsg("根级权限不能删除");
return resultVO;
}
}
//获取子级权限id集合
List<Integer> childrenPermissionIds = getChildrenPermissionIds(perId, permissionList);
//删除权限
int num = permissionDao.deletePermission(perId);
for (Integer id : childrenPermissionIds) {
num = permissionDao.deletePermission(id);
if (num == 1) {
rolePermissionDao.deleteByPerId(id);
menuPermissionDao.deleteByPerId(id);
}
}
rolePermissionDao.deleteByPerId(perId);
menuPermissionDao.deleteByPerId(perId);
resultVO.setMsg("删除权限成功");
return resultVO;
}
/**
* 获取子级权限id集合
*
* @param parentId
* @param permissions
* @return
*/
public static List<Integer> getChildrenPermissionIds(Integer parentId, List<Permission> permissions) {
List<Integer> list = new ArrayList<Integer>();
for (Permission permission : permissions) {
if ((parentId == null && permission.getParentId() == null) || (parentId != null && permission.getParentId() != null && parentId.intValue() == permission.getParentId().intValue())) {
list.add(permission.getId());
list.addAll(getChildrenPermissionIds(permission.getId(), permissions));
}
}
return list;
}
/**
* 获取显示权限
*
* @return
*/
public ResultVO getShowPermissions(Integer rootId) {
ResultVO resultVO = new ResultVO(true);
List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
//获取我拥有的权限
List<Permission> myPermissionList = new ArrayList<Permission>();
//获取所有权限
List<Permission> permissionList = permissionDao.selectAll();
Subject subject = SecurityUtils.getSubject();
for (Permission permission : permissionList) {
String key = permission.getKey();
boolean permitted = subject.isPermitted(key);
if (permitted) {
myPermissionList.add(permission);
}
}
List<Integer> childrenIds = null;
if (rootId != null) {
childrenIds = getChildrenPermissionIds(rootId, permissionList);
childrenIds.add(rootId);
}
List<Permission> rootPermissions = getRootPermissions(myPermissionList);
for (Permission permission : rootPermissions) {
if (childrenIds == null || !childrenIds.contains(permission.getId())) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", permission.getId());
map.put("text", permission.getName());
map.put("key", permission.getKey());
map.put("order", permission.getOrder());
map.put("children", getChildrenPermissions(myPermissionList, permission.getId(), null,childrenIds));
mapList.add(map);
}
}
resultVO.setData(mapList);
return resultVO;
}
/**
* 获取菜单显示权限
*
* @param menuId
* @return
*/
public ResultVO getMenuShowPermissions(int menuId) {
ResultVO resultVO = new ResultVO(true);
List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
//获取我拥有的权限
List<Permission> myPermissionList = new ArrayList<Permission>();
//获取所有权限
List<Permission> permissionList = permissionDao.selectAll();
Subject subject = SecurityUtils.getSubject();
for (Permission permission : permissionList) {
String key = permission.getKey();
boolean permitted = subject.isPermitted(key);
if (permitted) {
myPermissionList.add(permission);
}
}
//获取所有菜单
List<Menu> menus = menuDao.selectAll();
Menu menu = menuDao.get(menus, menuId);
if (menu == null) {
resultVO.setOk(false);
resultVO.setMsg("菜单不存在");
return resultVO;
}
//获取菜单拥有的权限id
Set<Integer> permissionIdSet = menuPermissionDao.selectPermissionIdSet(menuId);
List<Permission> rootPermissions = getRootPermissions(myPermissionList);
for (Permission permission : rootPermissions) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", permission.getId());
map.put("text", permission.getName());
map.put("key", permission.getKey());
map.put("checked", permissionIdSet.contains(permission.getId()));
map.put("order", permission.getOrder());
map.put("children", getChildrenPermissions(myPermissionList, permission.getId(), permissionIdSet,null));
mapList.add(map);
}
resultVO.setData(mapList);
return resultVO;
}
/**
* 获取角色显示权限
*
* @param roleId
* @return
*/
public ResultVO getRoleShowPermissions(int roleId) {
ResultVO resultVO = new ResultVO(true);
List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
//获取我拥有的权限
List<Permission> myPermissionList = new ArrayList<Permission>();
//获取所有权限
List<Permission> permissionList = permissionDao.selectAll();
Subject subject = SecurityUtils.getSubject();
for (Permission permission : p
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
EasyUI+Sping+Shiro+SpringMVC+MyBatis实现的用户角色权限管理系统。实现了用户-角色-权限三者结合的功能权限颗粒化控制: 按钮根据权限限制 菜单根据权限显示 所有相关URL根据权限拦截,数据权限暂时以用户为中心查询: 查询部门只能查询本部门以及子级部门 查询用户只能查询本级没有管理权限的用户以及所有子级用户 ,会话管理使用Shiro的框架,结合Redis缓存,便于缓存控制以及实现分布式部署
资源推荐
资源详情
资源评论
收起资源包目录
EasyUI+Sping+Shiro+SpringMVC+MyBatis实现的用户角色权限管理系统 (634个子文件)
amazeui.flat.css 336KB
amazeui.css 336KB
amazeui.flat.min.css 251KB
amazeui.min.css 250KB
easyui.css 56KB
easyui.css 56KB
easyui.css 56KB
easyui.css 56KB
easyui.css 53KB
thinker-md.vendor.css 50KB
tabs.css 9KB
tabs.css 9KB
tabs.css 9KB
tabs.css 9KB
tabs.css 7KB
mobile.css 7KB
datagrid.css 5KB
datagrid.css 5KB
datagrid.css 5KB
datagrid.css 5KB
admin.css 5KB
datagrid.css 5KB
linkbutton.css 4KB
linkbutton.css 4KB
linkbutton.css 4KB
linkbutton.css 4KB
linkbutton.css 4KB
color.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
tree.css 3KB
tree.css 3KB
tree.css 3KB
tree.css 3KB
tree.css 3KB
panel.css 3KB
panel.css 3KB
panel.css 3KB
panel.css 3KB
panel.css 2KB
icon.css 2KB
menu.css 2KB
menu.css 2KB
menu.css 2KB
menu.css 2KB
menu.css 2KB
window.css 2KB
window.css 2KB
window.css 2KB
window.css 2KB
tooltip.css 2KB
tooltip.css 2KB
tooltip.css 2KB
tooltip.css 2KB
tooltip.css 2KB
menubutton.css 2KB
menubutton.css 2KB
menubutton.css 2KB
menubutton.css 2KB
textbox.css 2KB
textbox.css 2KB
textbox.css 2KB
menubutton.css 2KB
textbox.css 2KB
textbox.css 2KB
searchbox.css 2KB
searchbox.css 2KB
searchbox.css 2KB
searchbox.css 2KB
searchbox.css 2KB
datalist.css 2KB
datalist.css 2KB
datalist.css 2KB
datalist.css 2KB
datalist.css 2KB
layout.css 2KB
layout.css 2KB
layout.css 2KB
layout.css 2KB
layout.css 2KB
window.css 2KB
switchbutton.css 2KB
switchbutton.css 2KB
switchbutton.css 2KB
switchbutton.css 2KB
switchbutton.css 2KB
slider.css 2KB
slider.css 2KB
slider.css 2KB
slider.css 2KB
slider.css 2KB
spinner.css 1KB
spinner.css 1KB
spinner.css 1KB
spinner.css 1KB
spinner.css 1KB
pagination.css 1KB
共 634 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6650
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功