/*
  * (non-Javadoc)
  *
  * @see
  * com.jcin.cms.service.system.IAuthorizationService#update(com.jcin.cms.service.system.
  * Authorization)
  */
 @Override
 @Transactional
 public String update(Authorization record) {
   // super.update(record);
   record.setUpdateDate(new Date());
   int result = authorizationMapper.updateByPrimaryKeySelective(record);
   return record.getId();
 }
  /*
   * (non-Javadoc)
   *
   * @see
   * com.jcin.cms.service.system.IAuthorizationService#insert(com.jcin.cms.service.system.
   * Authorization)
   */
  @Override
  @Transactional
  public String insert(Authorization record) {
    super.insert(record);

    record.setCreateDate(new Date());
    int result = authorizationMapper.insert(record);
    String id = record.getId();
    return id;
  }
  /*
   * (non-Javadoc)
   *
   * @see
   * com.jcin.cms.service.system.IUserServiceShiro#findPermissions(java.lang
   * .String)
   */
  @Override
  public Set<String> findPermissions(String username) {
    // ----------- 此处应该用sql去实现的,现在先用程序实现。
    UserCriteria userCriteria = new UserCriteria();
    UserCriteria.Criteria criteria = userCriteria.createCriteria();
    criteria.andUsernameEqualTo(username);
    List<User> users = userMapper.selectByExample(userCriteria);
    List<UserGroup> userGroups = new ArrayList<UserGroup>(); // 查询用户组
    for (User user : users) {
      UserGroupCriteria userGroupCriteria = new UserGroupCriteria();
      UserGroupCriteria.Criteria cri = userGroupCriteria.createCriteria();
      cri.andIdEqualTo(user.getUserGroupId());
      userGroups.addAll(userGroupMapper.selectByExample(userGroupCriteria));
    }

    List<UserGroupRole> userGroupRoles = new ArrayList<UserGroupRole>(); // 查询中间表
    for (UserGroup userGroup : userGroups) {
      UserGroupRoleCriteria userGroupRoleCriteria = new UserGroupRoleCriteria();
      UserGroupRoleCriteria.Criteria cri = userGroupRoleCriteria.createCriteria();
      cri.andUserGroupIdEqualTo(userGroup.getId());
      userGroupRoles.addAll(userGroupRoleMapper.selectByExample(userGroupRoleCriteria));
    }

    List<Role> roles = new ArrayList<Role>(); // 查询角色表
    for (UserGroupRole userGroupRole : userGroupRoles) {
      RoleCriteria roleCriteria = new RoleCriteria();
      RoleCriteria.Criteria rolecri = roleCriteria.createCriteria();
      rolecri.andIdEqualTo(userGroupRole.getRoleId());
      roles.addAll(roleMapper.selectByExample(roleCriteria));
    }

    List<RoleAuthorization> roleAuthorizations = new ArrayList<RoleAuthorization>();
    for (Role role : roles) {
      RoleAuthorizationCriteria authorizationCriteria = new RoleAuthorizationCriteria();
      RoleAuthorizationCriteria.Criteria roleAuthcri = authorizationCriteria.createCriteria();
      roleAuthcri.andRoleIdEqualTo(role.getId());
      roleAuthorizations.addAll(roleAuthorizationMapper.selectByExample(authorizationCriteria));
    }

    List<Authorization> authorizations = new ArrayList<Authorization>();
    for (RoleAuthorization roleAuthorization : roleAuthorizations) {
      AuthorizationCriteria authorizationCriteria = new AuthorizationCriteria();
      AuthorizationCriteria.Criteria authcri = authorizationCriteria.createCriteria();
      authcri.andIdEqualTo(roleAuthorization.getAuthorizationId());
      authorizations.addAll(authorizationMapper.selectByExample(authorizationCriteria));
    }

    Set<String> set = new HashSet<String>();
    for (Authorization authorization : authorizations) {
      set.add(authorization.getName());
    }
    return set;
  }