elkers
10 天以前 3a1efe863c0cf30683870c204fb9b55ff6c35500
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package com.nanjing.water.service.cache;
 
import com.nanjing.water.common.enums.EYesOrNo;
import com.nanjing.water.common.util.LocalDateTimeUtil;
import com.nanjing.water.common.util.SerializeUtil;
import com.nanjing.water.common.util.StringUtil;
import com.nanjing.water.entity.enums.EMenuType;
import com.nanjing.water.entity.enums.EOperation;
import com.nanjing.water.entity.enums.EState;
import com.nanjing.water.repository.impl.AdminPermissionMapperImpl;
import com.nanjing.water.repository.po.AdminMenuPO;
import com.nanjing.water.repository.po.AdminPermissionPO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.function.Function;
 
@Service
public class AdminPermissionService {
    @Autowired
    private AdminPermissionMapperImpl dao;
 
    @Autowired
    private StringRedisTemplate redisTemplate;
 
    /**
     * 获取所有权限(缓存)
     */
    public List<AdminPermissionPO> listAllWithCache() {
        try {
            if (redisTemplate.hasKey("adminPermissionCache")) {
                String json = redisTemplate.opsForValue().get("adminPermissionCache");
                if (StringUtil.isNotNullOrEmpty(json)) {
                    return SerializeUtil.toListObject(json, AdminPermissionPO.class);
                }
            }
        } catch (Exception e) {
            //
        }
        List<AdminPermissionPO> list = dao.getList();
        redisTemplate.opsForValue().set("adminPermissionCache", SerializeUtil.toJson(list));
        return list;
    }
 
    // 删除权限缓存
    public void removeListAllCache() {
        redisTemplate.delete("adminPermissionCache");
    }
 
    /**
     * 获取用户拥有的权限(缓存)
     */
    public List<AdminPermissionPO> listUserAllWithCache(Long id, List<Long> listRoleId, Function<List<Long>, List<AdminPermissionPO>> funcGetUserPermission) {
        try {
            if (redisTemplate.hasKey("userMenusCache")) {
                Object json = redisTemplate.opsForHash().get("userPermissionCache", id);
                if (Objects.nonNull(json)) {
                    return SerializeUtil.toListObject(json.toString(), AdminPermissionPO.class);
                }
            }
        } catch (Exception e) {
            //
        }
        List<AdminPermissionPO> list = funcGetUserPermission.apply(listRoleId);
        redisTemplate.opsForHash().put("userPermissionCache", id, list);
        return list;
    }
    // 删除指定用户拥有的权限缓存
    public void removeUserCache(Long id) {
        redisTemplate.opsForHash().delete("userPermissionCache", id);
    }
    // 删除所有用户拥有的权限缓存
    public void removeAllUserCache() {
        redisTemplate.delete("userPermissionCache");
    }
 
    /**
     * 给菜单添加默认权限
     * @param menu 菜单信息
     */
    public void createDefaultPermission(AdminMenuPO menu) {
        if (!Objects.equals(menu.getType(), EMenuType.PAGE.getValue())) {
            return;
        }
        Long now = LocalDateTimeUtil.nowTimeStamp();
        List<AdminPermissionPO> list = new ArrayList<>();
 
        AdminPermissionPO item1 = new AdminPermissionPO();
        item1.setSn(menu.getUrl().replaceAll("/", "") + "." + EOperation.LIST.getValue());
        item1.setMenuId(menu.getId());
        item1.setMenuUrl(menu.getUrl());
        item1.setName(menu.getName() + "." + EOperation.LIST.getDesc());
        item1.setIcon("");
        item1.setType(EOperation.LIST.getValue());
        item1.setStatus(EState.NORMAL.getValue());
        item1.setCreateTime(now);
        item1.setIsDelete(EYesOrNo.NO.getValue());
        list.add(item1);
 
        AdminPermissionPO item2 = new AdminPermissionPO();
        item2.setSn(menu.getUrl().replaceAll("/", "") + "." + EOperation.ADD.getValue());
        item2.setMenuId(menu.getId());
        item2.setMenuUrl(menu.getUrl());
        item2.setName(menu.getName() + "." + EOperation.ADD.getDesc());
        item2.setIcon("");
        item2.setType(EOperation.ADD.getValue());
        item2.setStatus(EState.NORMAL.getValue());
        item2.setCreateTime(now);
        item2.setIsDelete(EYesOrNo.NO.getValue());
        list.add(item2);
 
        AdminPermissionPO item3 = new AdminPermissionPO();
        item3.setSn(menu.getUrl().replaceAll("/", "") + "." + EOperation.UPDATE.getValue());
        item3.setMenuId(menu.getId());
        item3.setMenuUrl(menu.getUrl());
        item3.setName(menu.getName() + "." + EOperation.UPDATE.getDesc());
        item3.setIcon("");
        item3.setType(EOperation.UPDATE.getValue());
        item3.setStatus(EState.NORMAL.getValue());
        item3.setCreateTime(now);
        item3.setIsDelete(EYesOrNo.NO.getValue());
        list.add(item3);
 
        AdminPermissionPO item4 = new AdminPermissionPO();
        item4.setSn(menu.getUrl().replaceAll("/", "") + "." + EOperation.DETAIL.getValue());
        item4.setMenuId(menu.getId());
        item4.setMenuUrl(menu.getUrl());
        item4.setName(menu.getName() + "." + EOperation.DETAIL.getDesc());
        item4.setIcon("");
        item4.setType(EOperation.DETAIL.getValue());
        item4.setStatus(EState.NORMAL.getValue());
        item4.setCreateTime(now);
        item4.setIsDelete(EYesOrNo.NO.getValue());
        list.add(item4);
 
        dao.insert(list);
    }
}