apm.modules.sys.service.RoleService.java Source code

Java tutorial

Introduction

Here is the source code for apm.modules.sys.service.RoleService.java

Source

/**
 * Copyright © 2012-2013 Zaric All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 */
package apm.modules.sys.service;

import java.util.List;
import java.util.Set;

import apm.common.service.BaseService;
import apm.common.utils.StringUtils;
import apm.modules.sys.dao.OfficeDao;
import apm.modules.sys.dao.RoleDao;
import apm.modules.sys.dao.UserDao;
import apm.modules.sys.entity.Role;
import apm.modules.sys.entity.User;
import apm.modules.sys.security.SystemAuthorizingRealm;
import apm.modules.sys.support.Users;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.hibernate.sql.JoinType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.google.common.collect.Lists;

/**
 * ??,????.
 * @author resite
 * @version 2013-4-19
 */
@Service
@Transactional(readOnly = true)
public class RoleService extends BaseService<RoleDao, Role> {

    @Autowired
    private SystemAuthorizingRealm systemRealm;

    @Autowired
    private UserDao userDao;
    @Autowired
    private OfficeDao officeDao;

    public Role findRoleByName(String name) {
        return dao.findByName(name);
    }

    public Role getRole(String id) {
        return dao.findOne(id);
    }

    public List<Role> findAllRole() {
        //1.??5?
        List<Role> rs = dao.findDefineRoles();

        //2.?
        User user = Users.currentUser();
        DetachedCriteria dc = dao.createDetachedCriteria();
        dc.createAlias("office", "office");
        dc.createAlias("userList", "userList", JoinType.LEFT_OUTER_JOIN);
        dc.add(dataScopeFilter(user, "office", "userList")); //??????
        dc.add(Restrictions.eq(Role.DEL_FLAG, Role.DEL_FLAG_NORMAL));
        dc.addOrder(Order.asc("office.code")).addOrder(Order.asc("name"));

        List<Role> rs2 = dao.find(dc);
        for (int i = 0; i < rs2.size(); i++) { //??
            Role r = rs2.get(i);
            if (!rs.contains(r)) {
                rs.add(r);
            }
        }
        return rs;
    }

    @Transactional(readOnly = false)
    public void saveRole(Role role) {
        /*if (StringUtils.isEmpty(role.getOffice().getId())) {
           role.setOffice(officeDao.findOne("1"));
        }else {
           role.setOffice(officeDao.findOne(role.getOffice().getId()));
        }*/
        User user = Users.currentUser();
        if (StringUtils.isEmpty(role.getOffice().getId())) {
            //         role.setOffice(officeDao.findOne("1"));
            role.setOffice(user.getCompany()); //?
        } else {
            role.setOffice(officeDao.findOne(role.getOffice().getId()));
        }
        dao.clear();
        dao.save(role);
        systemRealm.clearAllCachedAuthorizationInfo();
    }

    @Transactional(readOnly = false)
    public void deleteRole(String id) {
        dao.deleteById(id);
        systemRealm.clearAllCachedAuthorizationInfo();
    }

    @Transactional(readOnly = false)
    public Boolean outUserInRole(Role role, String userId) {
        User user = userDao.findOne(userId);
        List<String> roleIds = user.getRoleIdList();
        Set<Role> roles = user.getRoleList();
        // 
        if (roleIds.contains(role.getId())) {
            roles.remove(role);
            userDao.save(user);
            systemRealm.clearAllCachedAuthorizationInfo();
            return true;
        }
        return false;
    }

    @Transactional(readOnly = false)
    public User assignUserToRole(Role role, String userId) {
        User user = userDao.findOne(userId);
        Set<Role> roles = user.getRoleList();
        // 
        if (roles.contains(role)) {
            return null;
        }
        user.getRoleList().add(role);
        userDao.save(user);
        systemRealm.clearAllCachedAuthorizationInfo();
        return user;
    }

}