package com.op.system.service.impl;

import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.op.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.op.system.api.domain.SysRole;
import com.op.system.api.domain.SysUser;
import com.op.system.service.ISysMenuService;
import com.op.system.service.ISysPermissionService;
import com.op.system.service.ISysRoleService;

/**
 * 用户权限处理
 *
 * @author OP
 */
@Service
public class SysPermissionServiceImpl implements ISysPermissionService {
	@Autowired
	private ISysRoleService roleService;

	@Autowired
	private ISysMenuService menuService;
	@Autowired
	private ISysUserService userService;
	/**
	 * 获取角色数据权限
	 *
	 * @param userId 用户Id
	 * @return 角色权限信息
	 */
	@Override
	public Set<String> getRolePermission(SysUser user) {
		Set<String> roles = new HashSet<String>();
		// 管理员拥有所有权限
		if (user.isAdmin()) {
			roles.add("admin");
		} else {
			roles.addAll(roleService.selectRolePermissionByUserId(user.getUserId()));
		}
		return roles;
	}

	/**
	 * 获取菜单数据权限
	 *
	 * @param userId 用户Id
	 * @return 菜单权限信息
	 */
	@Override
	public Set<String> getMenuPermission(SysUser user) {
		Set<String> perms = new HashSet<String>();
		// 管理员拥有所有权限
		if (user.isAdmin()) {
			perms.add("*:*:*");
		} else {
			List<SysRole> roles = user.getRoles();
			if (!roles.isEmpty() && roles.size() > 1) {
				// 多角色设置permissions属性，以便数据权限匹配权限
				for (SysRole role : roles) {
					Set<String> rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId());
					role.setPermissions(rolePerms);
					perms.addAll(rolePerms);
				}
			} else {
				perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId()));
			}
		}
		return perms;
	}
	@Override
	public List<Map<String, String>> getPoolNameList(SysUser user) {
		return userService.getPoolNameList(user);
	}
}
