package com.rekoe.service; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.crypto.SecureRandomNumberGenerator; import org.apache.shiro.crypto.hash.Sha256Hash; import org.nutz.dao.Chain; import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.Lang; import org.nutz.lang.Times; import org.nutz.lang.random.R; import com.rekoe.common.page.Pagination; import com.rekoe.domain.Role; import com.rekoe.domain.User; /** * @author 科技㊣²º¹³
* 2014年2月3日 下午4:48:45
* http://www.rekoe.com
* QQ:5382211 */ @IocBean(args = { "refer:dao" }) public class UserService extends BaseService { public UserService(Dao dao) { super(dao); } public List list() { return query(null, null); } public int update(User user) { return dao().update(user); } public void update(long uid, String password, boolean isLocked, Integer[] ids) { User user = fetch(uid); dao().clearLinks(user, "roles"); if (!Lang.isEmptyArray(ids)) { user.setRoles(dao().query(Role.class, Cnd.where("id", "in", ids))); } if (StringUtils.isNotBlank(password)) { String salt = new SecureRandomNumberGenerator().nextBytes().toBase64(); user.setSalt(salt); user.setPassword(new Sha256Hash(password, salt, 1024).toBase64()); } user.setLocked(isLocked); dao().update(user); if (!Lang.isEmpty(user.getRoles())) { dao().insertRelation(user, "roles"); } } public void updatePwd(Object uid, String password) { String salt = new SecureRandomNumberGenerator().nextBytes().toBase64(); dao().update(User.class, Chain.make("password", new Sha256Hash(password, salt, 1024).toBase64()).add("salt", salt), Cnd.where("id", "=", uid)); } public User insert(User user) { user = dao().insert(user); return dao().insertRelation(user, "roles"); } public boolean save(String username, String password, boolean isEnabled, String addr, int[] roleIds) { User user = new User(); user.setCreateDate(Times.now()); user.setDescription("--"); user.setLocked(!isEnabled); user.setName(username); user.setRegisterIp(addr); user.setRoles(dao().query(Role.class, Cnd.where("id", "in", roleIds))); String salt = new SecureRandomNumberGenerator().nextBytes().toBase64(); user.setSalt(salt); user.setPassword(new Sha256Hash(password, salt, 1024).toBase64()); insert(user); return true; } public User view(Long id) { User user = fetch(id); dao().fetchLinks(user, null); return user; } public User fetchByName(String name) { User user = fetch(Cnd.where("name", "=", name)); dao().fetchLinks(user, null); return user; } public List getRoleNameList(User user) { List roleNameList = new ArrayList(); for (Role role : user.getRoles()) { roleNameList.add(role.getName()); } return roleNameList; } public void addRole(Long userId, Long roleId) { User user = fetch(userId); Role role = new Role(); role.setId(roleId); user.setRoles(Lang.list(role)); dao().insertRelation(user, "roles"); } public void removeRole(Long userId, Long roleId) { dao().clear("system_user_role", Cnd.where("userid", "=", userId).and("roleid", "=", roleId)); } public Pagination getUserListByPager(Integer pageNumber, int pageSize) { return getObjListByPager(pageNumber, pageSize, null); } public User initUser(String name, String openid, String providerid, String addr) { User temp = dao().fetch(getEntityClass(), Cnd.where("name", "=", name)); if (!Lang.isEmpty(temp)) { name += R.random(2, 5); } User user = new User(); user.setCreateDate(Times.now()); user.setName(name); user.setOpenid(openid); user.setProviderid(providerid); user.setRegisterIp(addr); user.setLocked(true); user.setSystem(false); return dao().insert(user); } public User fetchByOpenID(String openid) { User user = fetch(Cnd.where("openid", "=", openid)); if (!Lang.isEmpty(user) && !user.isLocked()) { dao().fetchLinks(user, "servers"); dao().fetchLinks(user, "roles"); } return user; } public User regist(User user, String addr) { user.setCreateDate(Times.now()); user.setRegisterIp(addr); user.setSystem(false); String salt = new SecureRandomNumberGenerator().nextBytes().toBase64(); user.setSalt(salt); user.setPassword(new Sha256Hash(user.getPassword(), salt, 1024).toBase64()); return dao().insert(user); } public void removeUserUpdata(User user) { dao().clear("system_user_role", Cnd.where("USERID", "=", user.getId())); dao().clear("system_user_server", Cnd.where("USERID", "=", user.getId())); } public void insertRelations(User user) { dao().insertRelation(user, "servers"); dao().insertRelation(user, "roles"); } public void updateLock(User user) { dao().update(user, "^(locked)$"); } public void loadRolePermission(User user) { List roleList = user.getRoles(); for (Role role : roleList) { dao().fetchLinks(role, "permissions"); } } }