From 14d7a54ead0182ea4b37c4b183810e4e5c085b72 Mon Sep 17 00:00:00 2001 From: Friday <1121353141@qq.com> Date: Wed, 13 Sep 2023 14:35:47 +0000 Subject: [PATCH 1/4] =?UTF-8?q?=E5=BA=94=E7=94=A8=E7=BB=84=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/AppGroupAssociationRepository.java | 23 +++++++ .../app/AppGroupRepositoryCustomized.java | 9 +++ .../AppGroupRepositoryCustomizedImpl.java | 27 ++++++++ .../console/converter/app/AppConverter.java | 27 ++------ .../console/pojo/result/app/AppGetResult.java | 7 +++ .../service/app/impl/AppServiceImpl.java | 4 +- .../portal/controller/AppController.java | 5 +- .../portal/converter/AppGroupConverter.java | 61 +++++-------------- .../employee/portal/service/AppService.java | 4 +- .../portal/service/impl/AppServiceImpl.java | 34 +++-------- 10 files changed, 103 insertions(+), 98 deletions(-) diff --git a/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/AppGroupAssociationRepository.java b/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/AppGroupAssociationRepository.java index fd844a4f..98bf67a2 100644 --- a/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/AppGroupAssociationRepository.java +++ b/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/AppGroupAssociationRepository.java @@ -17,6 +17,8 @@ */ package cn.topiam.employee.common.repository.app; +import java.util.List; + import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.querydsl.QuerydslPredicateExecutor; @@ -52,10 +54,31 @@ public interface AppGroupAssociationRepository extends + " WHERE app_id = :appId and group_id = :groupId", nativeQuery = true) void deleteByGroupIdAndAppId(@Param("groupId") Long groupId, @Param("appId") Long appId); + /** + * 删除关联 + * + * @param appId {@link Long} + * @return {@link Boolean} + */ + @Modifying + @Transactional(rollbackFor = Exception.class) + @Query(value = "UPDATE app_group_association SET " + SOFT_DELETE_SET + + " WHERE app_id = :appId", nativeQuery = true) + void deleteAllByAppId(@Param(value = "appId") Long appId); + /** * 根据应用ID删除关联信息 * * @param appId {@link Long} */ void deleteByAppId(Long appId); + + /** + * 根据应用ID 查询关联信息 + * + * @param appId {@link Long} + * @return {@link List} + */ + @Query(value = "SELECT group_id FROM `app_group_association` WHERE app_id = :appId AND is_deleted = '0'", nativeQuery = true) + List findGroupIdByAppId(Long appId); } diff --git a/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/AppGroupRepositoryCustomized.java b/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/AppGroupRepositoryCustomized.java index 2317facd..af2d35e1 100644 --- a/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/AppGroupRepositoryCustomized.java +++ b/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/AppGroupRepositoryCustomized.java @@ -17,6 +17,8 @@ */ package cn.topiam.employee.common.repository.app; +import java.util.List; + import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -38,4 +40,11 @@ public interface AppGroupRepositoryCustomized { * @return {@link Page} */ Page getAppGroupList(AppGroupQuery query, Pageable pageable); + + /** + * 查询应用组列表 + * + * @return {@link List} + */ + List getAppGroupList(AppGroupQuery query); } diff --git a/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/impl/AppGroupRepositoryCustomizedImpl.java b/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/impl/AppGroupRepositoryCustomizedImpl.java index 2bf6cac8..eba16a39 100644 --- a/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/impl/AppGroupRepositoryCustomizedImpl.java +++ b/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/impl/AppGroupRepositoryCustomizedImpl.java @@ -81,5 +81,32 @@ public class AppGroupRepositoryCustomizedImpl implements AppGroupRepositoryCusto return new PageImpl<>(list, pageable, count); } + /** + * 查询应用组列表 + * + * @return {@link List} + */ + @Override + public List getAppGroupList(AppGroupQuery query) { + //@formatter:off + StringBuilder builder = new StringBuilder("SELECT `group`.id_, `group`.name_, `group`.code_, `group`.type_, `group`.create_time, `group`.remark_, IFNULL( ass.app_count, 0) AS app_count FROM app_group `group` LEFT JOIN(SELECT aga.group_id, COUNT(*) AS `app_count` FROM app_group_association aga WHERE aga.is_deleted = '0' GROUP BY aga.group_id ) ass ON `group`.id_ = ass.group_id WHERE is_deleted = '0'"); + //分组名称 + if (StringUtils.isNoneBlank(query.getName())) { + builder.append(" AND `group`.name_ like '%").append(query.getName()).append("%'"); + } + //分组编码 + if (StringUtils.isNoneBlank(query.getCode())) { + builder.append(" AND `group`.code_ like '%").append(query.getCode()).append("%'"); + } + //分组类型 + if (ObjectUtils.isNotEmpty(query.getType())) { + builder.append(" AND `group`.type_ like '%").append(query.getType().getCode()).append("%'"); + } + builder.append(" ORDER BY `group`.create_time DESC"); + //@formatter:on + List list = jdbcTemplate.query(builder.toString(), new AppGroupPoMapper()); + return list; + } + private final JdbcTemplate jdbcTemplate; } diff --git a/eiam-console/src/main/java/cn/topiam/employee/console/converter/app/AppConverter.java b/eiam-console/src/main/java/cn/topiam/employee/console/converter/app/AppConverter.java index fd00b4d2..bb4e00f9 100644 --- a/eiam-console/src/main/java/cn/topiam/employee/console/converter/app/AppConverter.java +++ b/eiam-console/src/main/java/cn/topiam/employee/console/converter/app/AppConverter.java @@ -25,14 +25,11 @@ import org.mapstruct.Mapper; import org.mapstruct.Mapping; import com.google.common.collect.Lists; -import com.querydsl.core.types.ExpressionUtils; -import com.querydsl.core.types.Predicate; + import cn.topiam.employee.application.ApplicationService; import cn.topiam.employee.application.ApplicationServiceLoader; import cn.topiam.employee.common.entity.app.AppEntity; -import cn.topiam.employee.common.entity.app.QAppEntity; -import cn.topiam.employee.common.entity.app.query.AppQuery; import cn.topiam.employee.console.pojo.result.app.AppGetResult; import cn.topiam.employee.console.pojo.result.app.AppListResult; import cn.topiam.employee.console.pojo.update.app.AppUpdateParam; @@ -48,24 +45,6 @@ import cn.topiam.employee.support.repository.page.domain.Page; @Mapper(componentModel = "spring") public interface AppConverter { - /** - * 查询应用列表参数转换为 Querydsl Predicate - * - * @param query {@link AppQuery} query - * @return {@link Predicate} - */ - default Predicate queryAppListParamConvertToPredicate(AppQuery query) { - QAppEntity application = QAppEntity.appEntity; - Predicate predicate = ExpressionUtils.and(application.isNotNull(), - application.deleted.eq(Boolean.FALSE)); - //查询条件 - //@formatter:off - predicate = StringUtils.isBlank(query.getName()) ? predicate : ExpressionUtils.and(predicate, application.name.like("%" + query.getName() + "%")); - predicate = Objects.isNull(query.getProtocol()) ? predicate : ExpressionUtils.and(predicate, application.protocol.eq(query.getProtocol())); - //@formatter:on - return predicate; - } - /** * 实体转换为应用列表结果 * @@ -135,9 +114,10 @@ public interface AppConverter { * 实体转应用返回 * * @param entity {@link AppEntity} + * @param groupIds {@link List} * @return {@link AppGetResult} */ - default AppGetResult entityConvertToAppResult(AppEntity entity) { + default AppGetResult entityConvertToAppResult(AppEntity entity, List groupIds) { if (entity == null) { return null; } @@ -150,6 +130,7 @@ public interface AppConverter { appGetResult.setClientId(entity.getClientId()); appGetResult.setClientSecret(entity.getClientSecret()); appGetResult.setType(entity.getType()); + appGetResult.setGroupIds(groupIds); //图标未配置,所以先从模版中拿 if (StringUtils.isBlank(entity.getIcon())) { ApplicationService applicationService = getApplicationServiceLoader() diff --git a/eiam-console/src/main/java/cn/topiam/employee/console/pojo/result/app/AppGetResult.java b/eiam-console/src/main/java/cn/topiam/employee/console/pojo/result/app/AppGetResult.java index aeb20e53..3c310581 100644 --- a/eiam-console/src/main/java/cn/topiam/employee/console/pojo/result/app/AppGetResult.java +++ b/eiam-console/src/main/java/cn/topiam/employee/console/pojo/result/app/AppGetResult.java @@ -19,6 +19,7 @@ package cn.topiam.employee.console.pojo.result.app; import java.io.Serializable; import java.time.LocalDateTime; +import java.util.List; import cn.topiam.employee.common.enums.app.AppProtocol; import cn.topiam.employee.common.enums.app.AppType; @@ -104,4 +105,10 @@ public class AppGetResult implements Serializable { */ @Parameter(description = "备注") private String remark; + + /** + * 应用组ID集合 + */ + @Parameter(description = "应用组ID集合") + private List groupIds; } diff --git a/eiam-console/src/main/java/cn/topiam/employee/console/service/app/impl/AppServiceImpl.java b/eiam-console/src/main/java/cn/topiam/employee/console/service/app/impl/AppServiceImpl.java index f2327faf..d539015f 100644 --- a/eiam-console/src/main/java/cn/topiam/employee/console/service/app/impl/AppServiceImpl.java +++ b/eiam-console/src/main/java/cn/topiam/employee/console/service/app/impl/AppServiceImpl.java @@ -139,6 +139,7 @@ public class AppServiceImpl implements AppService { public boolean deleteApp(Long id) { AppEntity app = appRequireNonNull(id); applicationServiceLoader.getApplicationService(app.getTemplate()).delete(id.toString()); + appGroupAssociationRepository.deleteAllByAppId(id); AuditContext .setTarget(Target.builder().id(id.toString()).type(TargetType.APPLICATION).build()); return true; @@ -155,7 +156,8 @@ public class AppServiceImpl implements AppService { Optional optional = appRepository.findById(id); if (optional.isPresent()) { AppEntity entity = optional.get(); - return appConverter.entityConvertToAppResult(entity); + List groupIds = appGroupAssociationRepository.findGroupIdByAppId(id); + return appConverter.entityConvertToAppResult(entity, groupIds); } return null; diff --git a/eiam-portal/src/main/java/cn/topiam/employee/portal/controller/AppController.java b/eiam-portal/src/main/java/cn/topiam/employee/portal/controller/AppController.java index 21995f93..440a7981 100644 --- a/eiam-portal/src/main/java/cn/topiam/employee/portal/controller/AppController.java +++ b/eiam-portal/src/main/java/cn/topiam/employee/portal/controller/AppController.java @@ -23,6 +23,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import cn.topiam.employee.common.entity.app.query.AppGroupQuery; import cn.topiam.employee.portal.pojo.query.GetAppListQuery; import cn.topiam.employee.portal.pojo.result.AppGroupListResult; import cn.topiam.employee.portal.pojo.result.GetAppListResult; @@ -68,8 +69,8 @@ public class AppController { */ @Operation(summary = "获取分组应用列表") @GetMapping(value = "/group_list") - public ApiRestResult> getAppGroupList() { - List list = appService.getAppGroupList(); + public ApiRestResult> getAppGroupList(AppGroupQuery appGroupQuery) { + List list = appService.getAppGroupList(appGroupQuery); return ApiRestResult.ok(list); } diff --git a/eiam-portal/src/main/java/cn/topiam/employee/portal/converter/AppGroupConverter.java b/eiam-portal/src/main/java/cn/topiam/employee/portal/converter/AppGroupConverter.java index 51ec79a5..2985cf87 100644 --- a/eiam-portal/src/main/java/cn/topiam/employee/portal/converter/AppGroupConverter.java +++ b/eiam-portal/src/main/java/cn/topiam/employee/portal/converter/AppGroupConverter.java @@ -17,19 +17,13 @@ */ package cn.topiam.employee.portal.converter; -import java.util.ArrayList; import java.util.List; import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import com.querydsl.core.types.ExpressionUtils; -import com.querydsl.core.types.Predicate; +import com.google.common.collect.Lists; -import cn.topiam.employee.common.entity.app.AppGroupAssociationEntity; -import cn.topiam.employee.common.entity.app.AppGroupEntity; -import cn.topiam.employee.common.entity.app.QAppGroupAssociationEntity; -import cn.topiam.employee.common.entity.app.QAppGroupEntity; +import cn.topiam.employee.common.entity.app.po.AppGroupPO; import cn.topiam.employee.portal.pojo.result.AppGroupListResult; /** @@ -42,53 +36,26 @@ import cn.topiam.employee.portal.pojo.result.AppGroupListResult; public interface AppGroupConverter { /** - * queryPredicate + * 实体转换为分组列表结果 * - * @return {@link Predicate} + * @param appGroupPoList {@link List} + * @return {@link List} */ - default Predicate getQueryPredicate() { - QAppGroupEntity appGroup = QAppGroupEntity.appGroupEntity; - return ExpressionUtils.and(appGroup.isNotNull(), appGroup.deleted.eq(Boolean.FALSE)); - } - - /** - * 应用组与应用关联 Predicate - * - * @return {@link Predicate} - */ - default Predicate queryAppGroupAssociationPredicate() { - QAppGroupAssociationEntity appGroupAssociation = QAppGroupAssociationEntity.appGroupAssociationEntity; - return ExpressionUtils.and(appGroupAssociation.isNotNull(), - appGroupAssociation.deleted.eq(Boolean.FALSE)); + default List entityConvertToAppGroupListResult(List appGroupPoList) { + List list = Lists.newArrayList(); + for (AppGroupPO po : appGroupPoList) { + AppGroupListResult result = entityConvertToAppGroupListResult(po); + list.add(result); + } + return list; } /** * 实体转分组管理列表 * - * @param list {@link AppGroupEntity} - * @param appGroupAssociationList {@link AppGroupAssociationEntity} + * @param appGroupPo {@link AppGroupPO} * @return {@link AppGroupListResult} */ - default List entityConvertToAppGroupListResult(List list, - List appGroupAssociationList) { - List results = new ArrayList<>(); - for (AppGroupEntity entity : list) { - AppGroupListResult result = appGroupEntityConverterToResult(entity); - long count = appGroupAssociationList.stream() - .filter(t -> t.getGroupId().equals(entity.getId())).count(); - result.setAppCount(Integer.valueOf(Long.toString(count))); - results.add(result); - } - return results; - } - - /** - * 将分组实体对象转换为Result - * - * @param entity {@link AppGroupEntity} - * @return {@link AppGroupEntity} - */ - @Mapping(target = "appCount", ignore = true) - AppGroupListResult appGroupEntityConverterToResult(AppGroupEntity entity); + AppGroupListResult entityConvertToAppGroupListResult(AppGroupPO appGroupPo); } diff --git a/eiam-portal/src/main/java/cn/topiam/employee/portal/service/AppService.java b/eiam-portal/src/main/java/cn/topiam/employee/portal/service/AppService.java index 2f043a72..3163ea14 100644 --- a/eiam-portal/src/main/java/cn/topiam/employee/portal/service/AppService.java +++ b/eiam-portal/src/main/java/cn/topiam/employee/portal/service/AppService.java @@ -19,6 +19,7 @@ package cn.topiam.employee.portal.service; import java.util.List; +import cn.topiam.employee.common.entity.app.query.AppGroupQuery; import cn.topiam.employee.portal.pojo.query.GetAppListQuery; import cn.topiam.employee.portal.pojo.result.AppGroupListResult; import cn.topiam.employee.portal.pojo.result.GetAppListResult; @@ -44,7 +45,8 @@ public interface AppService { /** * 查询应用分组 * + * @param appGroupQuery {@link AppGroupQuery} * @return {@link AppGroupListResult} */ - List getAppGroupList(); + List getAppGroupList(AppGroupQuery appGroupQuery); } diff --git a/eiam-portal/src/main/java/cn/topiam/employee/portal/service/impl/AppServiceImpl.java b/eiam-portal/src/main/java/cn/topiam/employee/portal/service/impl/AppServiceImpl.java index a034c654..807d7063 100644 --- a/eiam-portal/src/main/java/cn/topiam/employee/portal/service/impl/AppServiceImpl.java +++ b/eiam-portal/src/main/java/cn/topiam/employee/portal/service/impl/AppServiceImpl.java @@ -22,12 +22,9 @@ import java.util.List; import org.springframework.data.querydsl.QPageRequest; import org.springframework.stereotype.Service; -import com.querydsl.core.types.Predicate; - import cn.topiam.employee.common.entity.app.AppEntity; -import cn.topiam.employee.common.entity.app.AppGroupAssociationEntity; -import cn.topiam.employee.common.entity.app.AppGroupEntity; -import cn.topiam.employee.common.repository.app.AppGroupAssociationRepository; +import cn.topiam.employee.common.entity.app.po.AppGroupPO; +import cn.topiam.employee.common.entity.app.query.AppGroupQuery; import cn.topiam.employee.common.repository.app.AppGroupRepository; import cn.topiam.employee.common.repository.app.AppRepository; import cn.topiam.employee.portal.converter.AppConverter; @@ -67,51 +64,40 @@ public class AppServiceImpl implements AppService { /** * 查询应用分组 * + * @param appGroupQuery {@link AppGroupQuery} * @return {@link AppGroupListResult} */ @Override - public List getAppGroupList() { - Predicate predicate = appGroupConverter.getQueryPredicate(); - Predicate appGroupAssociationPredicate = appGroupConverter - .queryAppGroupAssociationPredicate(); - List appGroupAssociationList = (List) appGroupAssociationRepository - .findAll(appGroupAssociationPredicate); + public List getAppGroupList(AppGroupQuery appGroupQuery) { //查询映射 - List list = (List) appGroupRepository.findAll(predicate); - return appGroupConverter.entityConvertToAppGroupListResult(list, appGroupAssociationList); + List list = appGroupRepository.getAppGroupList(appGroupQuery); + return appGroupConverter.entityConvertToAppGroupListResult(list); } /** * AppRepository */ - private final AppRepository appRepository; + private final AppRepository appRepository; /** * AppGroupRepository */ - private final AppGroupRepository appGroupRepository; - - /** - * AppGroupAssociationRepository - */ - private final AppGroupAssociationRepository appGroupAssociationRepository; + private final AppGroupRepository appGroupRepository; /** * AppConverter */ - private final AppConverter appConverter; + private final AppConverter appConverter; /** * AppGroupConverter */ - private final AppGroupConverter appGroupConverter; + private final AppGroupConverter appGroupConverter; public AppServiceImpl(AppRepository appRepository, AppGroupRepository appGroupRepository, - AppGroupAssociationRepository appGroupAssociationRepository, AppConverter appConverter, AppGroupConverter appGroupConverter) { this.appRepository = appRepository; this.appGroupRepository = appGroupRepository; - this.appGroupAssociationRepository = appGroupAssociationRepository; this.appConverter = appConverter; this.appGroupConverter = appGroupConverter; } From 2c68239d4f0c095051041fe131f1079bc39bad9c Mon Sep 17 00:00:00 2001 From: smallbun <2689170096@qq.com> Date: Thu, 14 Sep 2023 17:58:00 +0800 Subject: [PATCH 2/4] =?UTF-8?q?:memo:=20=E7=89=88=E6=9D=83=E5=A3=B0?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 236 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 194 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 58644662..34d1bf8f 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,11 @@ --------------------------- +---
⭐️ 如果你喜欢 TopIAM,请给它一个 Star,您的支持将是我们前行的动力。
--------------------------- +--- ## 项目介绍 @@ -29,41 +29,101 @@ ## 核心特性 -+ 提供统一组织信息管理,多维度建立对应关系,实现在一个平台对企业人员、组织架构、应用信息的高效统一管理。 -+ 支持钉钉、飞书、企业微信等身份源集成能力,实现系统和企业OA平台数据联动,以用户为管理基点,结合入职、离职、调岗、兼职等人事事件,关联其相关应用权限变化而变化,保证应用访问权限的安全控制。 -+ 支持多因素认证,行为验证码、社交认证,融合认证等机制,保证用户认证安全可靠。 -+ 支持微信、微博、QQ等社交认证集成,使企业具有快速纳入互联网化认证能力。 -+ 支持 `SAML2`,`OAuth2`,`OIDC`,`CAS`,表单代填等认证协议及机制,实现单点登录功能,预配置大量 SaaS 应用及传统应用模板,开箱即用。 -+ 完善的安全审计,详尽记录每一次用户行为,使每一步操作有据可循,实时记录企业信息安全状况,精准识别企业异常访问和潜在威胁的源头。 -+ 提供标准`REST`和`SCIM2.0`接口轻松完成机构用户同步,实现企业对于账号生命周期的精细化管理。 -+ 开源、安全、自主可控。 +- 提供统一组织信息管理,多维度建立对应关系,实现在一个平台对企业人员、组织架构、应用信息的高效统一管理。 +- 支持钉钉、飞书、企业微信等身份源集成能力,实现系统和企业OA平台数据联动,以用户为管理基点,结合入职、离职、调岗、兼职等人事事件,关联其相关应用权限变化而变化,保证应用访问权限的安全控制。 +- 支持多因素认证,行为验证码、社交认证,融合认证等机制,保证用户认证安全可靠。 +- 支持微信、微博、QQ等社交认证集成,使企业具有快速纳入互联网化认证能力。 +- 支持 `SAML2`,`OAuth2`,`OIDC`,`CAS`,表单代填等认证协议及机制,实现单点登录功能,预配置大量 SaaS 应用及传统应用模板,开箱即用。 +- 完善的安全审计,详尽记录每一次用户行为,使每一步操作有据可循,实时记录企业信息安全状况,精准识别企业异常访问和潜在威胁的源头。 +- 提供标准`REST`和`SCIM2.0`接口轻松完成机构用户同步,实现企业对于账号生命周期的精细化管理。 +- 开源、安全、自主可控。 ## 功能描述 -| 功能模块 | 功能项 | 功能描述 | -|:-----|:---------|:---------------------------| -| 账户管理 | 组织与用户 | 支持组织与用户维护。 | -| | 用户组管理 | 支持用户组维护。 | -| | 身份源管理 | 支持通过钉钉、飞书等途径同步用户和组织信息到系统。 | -| 认证管理 | 认证提供商 | 支持配置多种认证源,用户可通过不同方式登录门户。 | -| 应用管理 | OIDC协议应用 | 支持通过OIDC协议进行应用SSO。 | -| | 表单代填应用 | 支持表单代填方式进行应用SSO。 | -| | JWT协议应用 | 支持JWT协议进行应用SSO。 | -| 行为审计 | 用户行为 | 记录企业用户相关操作行为记录。 | -| | 管理员行为 | 记录管理员相关操作记录。 | -| 安全设置 | 通用安全 | 支持通用安全配置,及安全防御策略。 | -| | 密码策略 | 支持配置用户密码全局规则策略。 | -| | 系统管理员 | 负责维护系统用户配置等。 | -| 系统设置 | 消息设置 | 支持配置维护邮件模版、邮件服务、短信服务。 | -| | IP地理库 | 支持配置IP地理库,实现精准IP定位。 | -| | 存储配置 | 支持配置云存储服务,如阿里云、腾讯云、MinIO等。 | -| 系统监控 | 会话管理 | 支持查看系统登录会话,支持回话下线。 | +| 功能模块 | 功能项 | 功能描述 | +| :------- | :----------- | :------------------------------------------------- | +| 账户管理 | 组织与用户 | 支持组织与用户维护。 | +| | 用户组管理 | 支持用户组维护。 | +| | 身份源管理 | 支持通过钉钉、飞书等途径同步用户和组织信息到系统。 | +| 认证管理 | 认证提供商 | 支持配置多种认证源,用户可通过不同方式登录门户。 | +| 应用管理 | OIDC协议应用 | 支持通过OIDC协议进行应用SSO。 | +| | 表单代填应用 | 支持表单代填方式进行应用SSO。 | +| | JWT协议应用 | 支持JWT协议进行应用SSO。 | +| 行为审计 | 用户行为 | 记录企业用户相关操作行为记录。 | +| | 管理员行为 | 记录管理员相关操作记录。 | +| 安全设置 | 通用安全 | 支持通用安全配置,及安全防御策略。 | +| | 密码策略 | 支持配置用户密码全局规则策略。 | +| | 系统管理员 | 负责维护系统用户配置等。 | +| 系统设置 | 消息设置 | 支持配置维护邮件模版、邮件服务、短信服务。 | +| | IP地理库 | 支持配置IP地理库,实现精准IP定位。 | +| | 存储配置 | 支持配置云存储服务,如阿里云、腾讯云、MinIO等。 | +| 系统监控 | 会话管理 | 支持查看系统登录会话,支持回话下线。 | + +## 开源说明 + +一方面希望通过开源加强项 + +--- + +## 项目介绍 + +**TopIAM** 数字身份管控平台,简称:EIAM(Employee Identity and Access Management), +用于管理企业内员工账号、权限、身份认证、应用访问,帮助整合部署在本地或云端的内部办公系统、业务系统及三方 SaaS +系统的所有身份,实现一个账号打通所有应用的服务。 + +## 系统架构 + +![](https://github.com/topiam/eiam/assets/30397655/dc2c2749-e873-4d4d-ba20-43d5db81c6b8) + +## 核心特性 + +- 提供统一组织信息管理,多维度建立对应关系,实现在一个平台对企业人员、组织架构、应用信息的高效统一管理。 +- 支持钉钉、飞书、企业微信等身份源集成能力,实现系统和企业OA平台数据联动,以用户为管理基点,结合入职、离职、调岗、兼职等人事事件,关联其相关应用权限变化而变化,保证应用访问权限的安全控制。 +- 支持多因素认证,行为验证码、社交认证,融合认证等机制,保证用户认证安全可靠。 +- 支持微信、微博、QQ等社交认证集成,使企业具有快速纳入互联网化认证能力。 +- 支持 `SAML2`,`OAuth2`,`OIDC`,`CAS`,表单代填等认证协议及机制,实现单点登录功能,预配置大量 SaaS 应用及传统应用模板,开箱即用。 +- 完善的安全审计,详尽记录每一次用户行为,使每一步操作有据可循,实时记录企业信息安全状况,精准识别企业异常访问和潜在威胁的源头。 +- 提供标准`REST`和`SCIM2.0`接口轻松完成机构用户同步,实现企业对于账号生命周期的精细化管理。 +- 开源、安全、自主可控。 + +## 功能描述 + +| 功能模块 | 功能项 | 功能描述 | +| :------- | :----------- | :------------------------------------------------- | +| 账户管理 | 组织与用户 | 支持组织与用户维护。 | +| | 用户组管理 | 支持用户组维护。 | +| | 身份源管理 | 支持通过钉钉、飞书等途径同步用户和组织信息到系统。 | +| 认证管理 | 认证提供商 | 支持配置多种认证源,用户可通过不同方式登录门户。 | +| 应用管理 | OIDC协议应用 | 支持通过OIDC协议进行应用SSO。 | +| | 表单代填应用 | 支持表单代填方式进行应用SSO。 | +| | JWT协议应用 | 支持JWT协议进行应用SSO。 | +| 行为审计 | 用户行为 | 记录企业用户相关操作行为记录。 | +| | 管理员行为 | 记录管理员相关操作记录。 | +| 安全设置 | 通用安全 | 支持通用安全配置,及安全防御策略。 | +| | 密码策略 | 支持配置用户密码全局规则策略。 | +| | 系统管理员 | 负责维护系统用户配置等。 | +| 系统设置 | 消息设置 | 支持配置维护邮件模版、邮件服务、短信服务。 | +| | IP地理库 | 支持配置IP地理库,实现精准IP定位。 | +| | 存储配置 | 支持配置云存储服务,如阿里云、腾讯云、MinIO等。 | +| 系统监控 | 会话管理 | 支持查看系统登录会话,支持回话下线。 | + +## 版权声明 + +开源不代表免费,`TOPIAM` 遵循 AGPL-3.0 开源协议发布,并提供技术交流学习,但绝不允许修改后和衍生的代码做为闭源的商业软件发布和销售! 如果需要将本产品在本地进行任何附带商业化性质行为使用,请联系项目负责人进行商业授权,以遵守 AGPL 协议保证您的正常使用。 + +我们也提供了商业授权,如果您**需要将本产品进行二次开发、更改并进行任何附带商业化性质行为使用**,请联系我们进行商业授权,以遵守 `AGPL-3.0` 协议保证您的正常使用。 + +目前在国内 `GPL` 协议**具备合同特征,是一种民事法律行为** ,属于我国《合同法》调整的范围。 `TOPIAM` 项目团队保留诉讼权利。 + +[相关案例:违反 `GPL` 协议赔偿 50 万,国内首例!](https://mp.weixin.qq.com/s/YQ6sNjbDS-P7BViLZIsaoA) + +> **TopIAM 开源团队拥有对本开源协议的最终解释权。** ## 在线演示 -+ 管理端:https://eiam-console.topiam.cn +- 管理端:https://eiam-console.topiam.cn > 体验账号:admin/topiam.cn -+ 用户端:https://eiam-portal.topiam.cn +- 用户端:https://eiam-portal.topiam.cn > 体验账号:portal/topiam.cn ## 技术架构 @@ -75,11 +135,10 @@ ## 安装部署 -+ [本地部署](https://eiam.topiam.cn/docs/deployment/deployment-local/) -+ [Docker部署](https://eiam.topiam.cn/docs/deployment/deployment-local/) -+ [K8S部署](https://eiam.topiam.cn/docs/deployment/deployment-k8s/) -+ [更多方式](https://eiam.topiam.cn/docs/deployment/) - +- [本地部署](https://eiam.topiam.cn/docs/deployment/deployment-local/) +- [Docker部署](https://eiam.topiam.cn/docs/deployment/deployment-local/) +- [K8S部署](https://eiam.topiam.cn/docs/deployment/deployment-k8s/) +- [更多方式](https://eiam.topiam.cn/docs/deployment/) ## 用户登记 @@ -87,16 +146,109 @@ **我们会优先支持登记用户的需求及问题反馈。** ->登记信息仅用于推广本产品~ +> 登记信息仅用于推广本产品~ [点击进行接入登记](https://gitee.com/topiam/eiam/issues/I7SAJK) -+ 浙江智慧江能技术服务股份有限公司 -+ 广东省印象华云数据有限公司 -+ 宁波甬承电子科技有限公司 -+ 山东爱特云翔信息技术有限公司 -+ 北京中科生活服务有限公司 -+ 四维世景北京(科技)有限公司 +- 浙江智慧江能技术服务股份有限公司 +- 广东省印象华云数据有限公司 +- 宁波甬承电子科技有限公司 +- 山东爱特云翔信息技术有限公司 +- 北京中科生活服务有限公司 +- 四维世景北京(科技)有限公司 + +## 微信公众号 + +欢迎关注 TopIAM 微信公众号,接收产品最新动态。 + +![](https://user-images.githubusercontent.com/30397655/206887629-faf77f3e-1681-4918-99bf-773ef434f088.png) + +## 交流群 + +![](https://eiam.topiam.cn/img/group-qr-code.jpg) + +## 参与贡献 + +我们强烈欢迎有兴趣的开发者参与到项目建设中来,同时欢迎大家对项目提出宝贵意见建议和功能需求,项目正在积极开发,欢迎 PR 👏。 + +强烈推荐阅读 [《提问的智慧》](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way)、[《如何向开源社区提问题》](https://github.com/seajs/seajs/issues/545) +和 [《如何有效地报告 Bug》](http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html)、[《如何向开源项目提交无法解答的问题》](https://zhuanlan.zhihu.com/p/25795393) +,更好的问题更容易获得帮助。 + +## Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=topiam/eiam&type=Date)](https://star-history.com/#topiam/eiam&Date) + +## FOSSA Status + +[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Ftopiam%2Feiam.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Ftopiam%2Feiam?ref=badge_large) + +## License + +目产品化程度;另一方面希望在社区中吸收更多的实践场景进而继续完善产品,也欢迎大家参与到项目中来。 + +为保证社区繁荣和项目自由健康发展,在开源许可证方面,`TopIAM` 选择采用 `AGPL-3.0` 开源协议,`AGPL-3.0` 是 OSI +批准的许可证,符合自由和开源软件的所有标准,**开源永远是我们的初心与核心,我们将始终不渝的坚持去做这件事,我们相信在社区的推动下,这件事我们一定会做的更好**。 + +或许很多开发者对此协议抱有一些疑问,开源社区目前也有很多采用 `AGPL-3.0` 协议的开源软件,例如 `MongoDB`、`Grafana`、`Loki` +等,维基百科还专门有一份列表列出了哪些[开源项目](https://en.wikipedia.org/wiki/Category:Software_using_the_GNU_AGPL_license) +采用了 `AGPL-3.0` 开源协议。 + +`AGPL-3.0` 协议有一个非常关键的点,即对修改上游开源项目代码后的二次分发版本必须也要开源,协议限制的是部分企业想 `Folk` +开源项目代码后进行闭源商业分发,跟上游开源项目的维护团队进行直接的商业竞争,如果仅仅只是企业内部自己使用而不进行任何层面修改,用户大可不必担心 `AGPL-3.0` +协议带来的限制, 这些条件旨在鼓励和希望修改软件的第三方也为项目和社区做出贡献。我们认为这是一种更公平的前进方式,我们相信这将有助于我们建立更强大的社区。 + +简单来讲:如果您修改了 `TopIAM` 项目源代码,那么您必须将这些修改贡献给社区,**绝不允许修改后和衍生的代码做为闭源的商业软件发布和销售 +**。 + +我们也提供了商业授权,如果您**需要将本产品进行二次开发、更改并进行任何附带商业化性质行为使用** +,请联系我们进行商业授权,以遵守 `AGPL-3.0` 协议保证您的正常使用。 + +除此之外,我们也会酌情接受根据个人或企业需求的定制化开发。 + +目前在国内 `GPL` 协议**具备合同特征,是一种民事法律行为** ,属于我国《合同法》调整的范围。 `TopIAM` 项目团队保留诉讼权利。 + +[相关案例:违反 `GPL` 协议赔偿 50 万,国内首例!](https://mp.weixin.qq.com/s/YQ6sNjbDS-P7BViLZIsaoA) + +> **TopIAM 开源团队拥有对本开源协议的最终解释权。** + +## 在线演示 + +- 管理端:https://eiam-console.topiam.cn + > 体验账号:admin/topiam.cn +- 用户端:https://eiam-portal.topiam.cn + > 体验账号:portal/topiam.cn + +## 技术架构 + +- **后端**:[Spring Boot](https://spring.io/projects/spring-boot/) 、[Spring Security](https://spring.io/projects/spring-security/) +- **前端**:[React.js](https://react.dev/) 、[Ant Design](https://ant.design) +- **中间件**:[MySQL](https://www.mysql.com/) 、[Redis](https://redis.io/)、[ElasticSearch](https://www.elastic.co/cn/elasticsearch/)、[RabbitMQ](https://www.rabbitmq.com/) +- **基础设施**:[Docker](https://www.docker.com/) + +## 安装部署 + +- [本地部署](https://eiam.topiam.cn/docs/deployment/deployment-local/) +- [Docker部署](https://eiam.topiam.cn/docs/deployment/deployment-local/) +- [K8S部署](https://eiam.topiam.cn/docs/deployment/deployment-k8s/) +- [更多方式](https://eiam.topiam.cn/docs/deployment/) + +## 用户登记 + +如果您和您的公司或组织使用了 TopIAM 企业身份管控平台 ,非常感谢您的支持与信任,请在此进行登记,您的回复将成为维护者、社区用户和观望者的信心来源。感谢支持 💖 + +**我们会优先支持登记用户的需求及问题反馈。** + +> 登记信息仅用于推广本产品~ + +[点击进行接入登记](https://gitee.com/topiam/eiam/issues/I7SAJK) + +- 浙江智慧江能技术服务股份有限公司 +- 广东省印象华云数据有限公司 +- 宁波甬承电子科技有限公司 +- 山东爱特云翔信息技术有限公司 +- 北京中科生活服务有限公司 +- 四维世景北京(科技)有限公司 ## 微信公众号 From 028f4d27ddd889fa8cd0c39d6440cb0ce0855a84 Mon Sep 17 00:00:00 2001 From: smallbun <2689170096@qq.com> Date: Thu, 14 Sep 2023 18:03:10 +0800 Subject: [PATCH 3/4] =?UTF-8?q?:memo:=20=E7=89=88=E6=9D=83=E5=A3=B0?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 256 +++++++++++++----------------------------------------- 1 file changed, 58 insertions(+), 198 deletions(-) diff --git a/README.md b/README.md index 34d1bf8f..72d11df0 100644 --- a/README.md +++ b/README.md @@ -11,101 +11,11 @@ ---- +--------------------------
⭐️ 如果你喜欢 TopIAM,请给它一个 Star,您的支持将是我们前行的动力。
---- - -## 项目介绍 - -**TopIAM** 数字身份管控平台,简称:EIAM(Employee Identity and Access Management), -用于管理企业内员工账号、权限、身份认证、应用访问,帮助整合部署在本地或云端的内部办公系统、业务系统及三方 SaaS -系统的所有身份,实现一个账号打通所有应用的服务。 - -## 系统架构 - -![](https://github.com/topiam/eiam/assets/30397655/dc2c2749-e873-4d4d-ba20-43d5db81c6b8) - -## 核心特性 - -- 提供统一组织信息管理,多维度建立对应关系,实现在一个平台对企业人员、组织架构、应用信息的高效统一管理。 -- 支持钉钉、飞书、企业微信等身份源集成能力,实现系统和企业OA平台数据联动,以用户为管理基点,结合入职、离职、调岗、兼职等人事事件,关联其相关应用权限变化而变化,保证应用访问权限的安全控制。 -- 支持多因素认证,行为验证码、社交认证,融合认证等机制,保证用户认证安全可靠。 -- 支持微信、微博、QQ等社交认证集成,使企业具有快速纳入互联网化认证能力。 -- 支持 `SAML2`,`OAuth2`,`OIDC`,`CAS`,表单代填等认证协议及机制,实现单点登录功能,预配置大量 SaaS 应用及传统应用模板,开箱即用。 -- 完善的安全审计,详尽记录每一次用户行为,使每一步操作有据可循,实时记录企业信息安全状况,精准识别企业异常访问和潜在威胁的源头。 -- 提供标准`REST`和`SCIM2.0`接口轻松完成机构用户同步,实现企业对于账号生命周期的精细化管理。 -- 开源、安全、自主可控。 - -## 功能描述 - -| 功能模块 | 功能项 | 功能描述 | -| :------- | :----------- | :------------------------------------------------- | -| 账户管理 | 组织与用户 | 支持组织与用户维护。 | -| | 用户组管理 | 支持用户组维护。 | -| | 身份源管理 | 支持通过钉钉、飞书等途径同步用户和组织信息到系统。 | -| 认证管理 | 认证提供商 | 支持配置多种认证源,用户可通过不同方式登录门户。 | -| 应用管理 | OIDC协议应用 | 支持通过OIDC协议进行应用SSO。 | -| | 表单代填应用 | 支持表单代填方式进行应用SSO。 | -| | JWT协议应用 | 支持JWT协议进行应用SSO。 | -| 行为审计 | 用户行为 | 记录企业用户相关操作行为记录。 | -| | 管理员行为 | 记录管理员相关操作记录。 | -| 安全设置 | 通用安全 | 支持通用安全配置,及安全防御策略。 | -| | 密码策略 | 支持配置用户密码全局规则策略。 | -| | 系统管理员 | 负责维护系统用户配置等。 | -| 系统设置 | 消息设置 | 支持配置维护邮件模版、邮件服务、短信服务。 | -| | IP地理库 | 支持配置IP地理库,实现精准IP定位。 | -| | 存储配置 | 支持配置云存储服务,如阿里云、腾讯云、MinIO等。 | -| 系统监控 | 会话管理 | 支持查看系统登录会话,支持回话下线。 | - -## 开源说明 - -一方面希望通过开源加强项 - ---- - -## 项目介绍 - -**TopIAM** 数字身份管控平台,简称:EIAM(Employee Identity and Access Management), -用于管理企业内员工账号、权限、身份认证、应用访问,帮助整合部署在本地或云端的内部办公系统、业务系统及三方 SaaS -系统的所有身份,实现一个账号打通所有应用的服务。 - -## 系统架构 - -![](https://github.com/topiam/eiam/assets/30397655/dc2c2749-e873-4d4d-ba20-43d5db81c6b8) - -## 核心特性 - -- 提供统一组织信息管理,多维度建立对应关系,实现在一个平台对企业人员、组织架构、应用信息的高效统一管理。 -- 支持钉钉、飞书、企业微信等身份源集成能力,实现系统和企业OA平台数据联动,以用户为管理基点,结合入职、离职、调岗、兼职等人事事件,关联其相关应用权限变化而变化,保证应用访问权限的安全控制。 -- 支持多因素认证,行为验证码、社交认证,融合认证等机制,保证用户认证安全可靠。 -- 支持微信、微博、QQ等社交认证集成,使企业具有快速纳入互联网化认证能力。 -- 支持 `SAML2`,`OAuth2`,`OIDC`,`CAS`,表单代填等认证协议及机制,实现单点登录功能,预配置大量 SaaS 应用及传统应用模板,开箱即用。 -- 完善的安全审计,详尽记录每一次用户行为,使每一步操作有据可循,实时记录企业信息安全状况,精准识别企业异常访问和潜在威胁的源头。 -- 提供标准`REST`和`SCIM2.0`接口轻松完成机构用户同步,实现企业对于账号生命周期的精细化管理。 -- 开源、安全、自主可控。 - -## 功能描述 - -| 功能模块 | 功能项 | 功能描述 | -| :------- | :----------- | :------------------------------------------------- | -| 账户管理 | 组织与用户 | 支持组织与用户维护。 | -| | 用户组管理 | 支持用户组维护。 | -| | 身份源管理 | 支持通过钉钉、飞书等途径同步用户和组织信息到系统。 | -| 认证管理 | 认证提供商 | 支持配置多种认证源,用户可通过不同方式登录门户。 | -| 应用管理 | OIDC协议应用 | 支持通过OIDC协议进行应用SSO。 | -| | 表单代填应用 | 支持表单代填方式进行应用SSO。 | -| | JWT协议应用 | 支持JWT协议进行应用SSO。 | -| 行为审计 | 用户行为 | 记录企业用户相关操作行为记录。 | -| | 管理员行为 | 记录管理员相关操作记录。 | -| 安全设置 | 通用安全 | 支持通用安全配置,及安全防御策略。 | -| | 密码策略 | 支持配置用户密码全局规则策略。 | -| | 系统管理员 | 负责维护系统用户配置等。 | -| 系统设置 | 消息设置 | 支持配置维护邮件模版、邮件服务、短信服务。 | -| | IP地理库 | 支持配置IP地理库,实现精准IP定位。 | -| | 存储配置 | 支持配置云存储服务,如阿里云、腾讯云、MinIO等。 | -| 系统监控 | 会话管理 | 支持查看系统登录会话,支持回话下线。 | +-------------------------- ## 版权声明 @@ -119,11 +29,53 @@ > **TopIAM 开源团队拥有对本开源协议的最终解释权。** +## 项目介绍 + +**TopIAM** 数字身份管控平台,简称:EIAM(Employee Identity and Access Management), +用于管理企业内员工账号、权限、身份认证、应用访问,帮助整合部署在本地或云端的内部办公系统、业务系统及三方 SaaS +系统的所有身份,实现一个账号打通所有应用的服务。 + +## 系统架构 + +![](https://github.com/topiam/eiam/assets/30397655/dc2c2749-e873-4d4d-ba20-43d5db81c6b8) + +## 核心特性 + ++ 提供统一组织信息管理,多维度建立对应关系,实现在一个平台对企业人员、组织架构、应用信息的高效统一管理。 ++ 支持钉钉、飞书、企业微信等身份源集成能力,实现系统和企业OA平台数据联动,以用户为管理基点,结合入职、离职、调岗、兼职等人事事件,关联其相关应用权限变化而变化,保证应用访问权限的安全控制。 ++ 支持多因素认证,行为验证码、社交认证,融合认证等机制,保证用户认证安全可靠。 ++ 支持微信、微博、QQ等社交认证集成,使企业具有快速纳入互联网化认证能力。 ++ 支持 `SAML2`,`OAuth2`,`OIDC`,`CAS`,表单代填等认证协议及机制,实现单点登录功能,预配置大量 SaaS 应用及传统应用模板,开箱即用。 ++ 完善的安全审计,详尽记录每一次用户行为,使每一步操作有据可循,实时记录企业信息安全状况,精准识别企业异常访问和潜在威胁的源头。 ++ 提供标准`REST`和`SCIM2.0`接口轻松完成机构用户同步,实现企业对于账号生命周期的精细化管理。 ++ 开源、安全、自主可控。 + +## 功能描述 + +| 功能模块 | 功能项 | 功能描述 | +|:-----|:---------|:---------------------------| +| 账户管理 | 组织与用户 | 支持组织与用户维护。 | +| | 用户组管理 | 支持用户组维护。 | +| | 身份源管理 | 支持通过钉钉、飞书等途径同步用户和组织信息到系统。 | +| 认证管理 | 认证提供商 | 支持配置多种认证源,用户可通过不同方式登录门户。 | +| 应用管理 | OIDC协议应用 | 支持通过OIDC协议进行应用SSO。 | +| | 表单代填应用 | 支持表单代填方式进行应用SSO。 | +| | JWT协议应用 | 支持JWT协议进行应用SSO。 | +| 行为审计 | 用户行为 | 记录企业用户相关操作行为记录。 | +| | 管理员行为 | 记录管理员相关操作记录。 | +| 安全设置 | 通用安全 | 支持通用安全配置,及安全防御策略。 | +| | 密码策略 | 支持配置用户密码全局规则策略。 | +| | 系统管理员 | 负责维护系统用户配置等。 | +| 系统设置 | 消息设置 | 支持配置维护邮件模版、邮件服务、短信服务。 | +| | IP地理库 | 支持配置IP地理库,实现精准IP定位。 | +| | 存储配置 | 支持配置云存储服务,如阿里云、腾讯云、MinIO等。 | +| 系统监控 | 会话管理 | 支持查看系统登录会话,支持回话下线。 | + ## 在线演示 -- 管理端:https://eiam-console.topiam.cn ++ 管理端:https://eiam-console.topiam.cn > 体验账号:admin/topiam.cn -- 用户端:https://eiam-portal.topiam.cn ++ 用户端:https://eiam-portal.topiam.cn > 体验账号:portal/topiam.cn ## 技术架构 @@ -135,10 +87,11 @@ ## 安装部署 -- [本地部署](https://eiam.topiam.cn/docs/deployment/deployment-local/) -- [Docker部署](https://eiam.topiam.cn/docs/deployment/deployment-local/) -- [K8S部署](https://eiam.topiam.cn/docs/deployment/deployment-k8s/) -- [更多方式](https://eiam.topiam.cn/docs/deployment/) ++ [本地部署](https://eiam.topiam.cn/docs/deployment/deployment-local/) ++ [Docker部署](https://eiam.topiam.cn/docs/deployment/deployment-local/) ++ [K8S部署](https://eiam.topiam.cn/docs/deployment/deployment-k8s/) ++ [更多方式](https://eiam.topiam.cn/docs/deployment/) + ## 用户登记 @@ -146,109 +99,16 @@ **我们会优先支持登记用户的需求及问题反馈。** -> 登记信息仅用于推广本产品~ +>登记信息仅用于推广本产品~ [点击进行接入登记](https://gitee.com/topiam/eiam/issues/I7SAJK) -- 浙江智慧江能技术服务股份有限公司 -- 广东省印象华云数据有限公司 -- 宁波甬承电子科技有限公司 -- 山东爱特云翔信息技术有限公司 -- 北京中科生活服务有限公司 -- 四维世景北京(科技)有限公司 - -## 微信公众号 - -欢迎关注 TopIAM 微信公众号,接收产品最新动态。 - -![](https://user-images.githubusercontent.com/30397655/206887629-faf77f3e-1681-4918-99bf-773ef434f088.png) - -## 交流群 - -![](https://eiam.topiam.cn/img/group-qr-code.jpg) - -## 参与贡献 - -我们强烈欢迎有兴趣的开发者参与到项目建设中来,同时欢迎大家对项目提出宝贵意见建议和功能需求,项目正在积极开发,欢迎 PR 👏。 - -强烈推荐阅读 [《提问的智慧》](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way)、[《如何向开源社区提问题》](https://github.com/seajs/seajs/issues/545) -和 [《如何有效地报告 Bug》](http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html)、[《如何向开源项目提交无法解答的问题》](https://zhuanlan.zhihu.com/p/25795393) -,更好的问题更容易获得帮助。 - -## Star History - -[![Star History Chart](https://api.star-history.com/svg?repos=topiam/eiam&type=Date)](https://star-history.com/#topiam/eiam&Date) - -## FOSSA Status - -[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Ftopiam%2Feiam.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Ftopiam%2Feiam?ref=badge_large) - -## License - -目产品化程度;另一方面希望在社区中吸收更多的实践场景进而继续完善产品,也欢迎大家参与到项目中来。 - -为保证社区繁荣和项目自由健康发展,在开源许可证方面,`TopIAM` 选择采用 `AGPL-3.0` 开源协议,`AGPL-3.0` 是 OSI -批准的许可证,符合自由和开源软件的所有标准,**开源永远是我们的初心与核心,我们将始终不渝的坚持去做这件事,我们相信在社区的推动下,这件事我们一定会做的更好**。 - -或许很多开发者对此协议抱有一些疑问,开源社区目前也有很多采用 `AGPL-3.0` 协议的开源软件,例如 `MongoDB`、`Grafana`、`Loki` -等,维基百科还专门有一份列表列出了哪些[开源项目](https://en.wikipedia.org/wiki/Category:Software_using_the_GNU_AGPL_license) -采用了 `AGPL-3.0` 开源协议。 - -`AGPL-3.0` 协议有一个非常关键的点,即对修改上游开源项目代码后的二次分发版本必须也要开源,协议限制的是部分企业想 `Folk` -开源项目代码后进行闭源商业分发,跟上游开源项目的维护团队进行直接的商业竞争,如果仅仅只是企业内部自己使用而不进行任何层面修改,用户大可不必担心 `AGPL-3.0` -协议带来的限制, 这些条件旨在鼓励和希望修改软件的第三方也为项目和社区做出贡献。我们认为这是一种更公平的前进方式,我们相信这将有助于我们建立更强大的社区。 - -简单来讲:如果您修改了 `TopIAM` 项目源代码,那么您必须将这些修改贡献给社区,**绝不允许修改后和衍生的代码做为闭源的商业软件发布和销售 -**。 - -我们也提供了商业授权,如果您**需要将本产品进行二次开发、更改并进行任何附带商业化性质行为使用** -,请联系我们进行商业授权,以遵守 `AGPL-3.0` 协议保证您的正常使用。 - -除此之外,我们也会酌情接受根据个人或企业需求的定制化开发。 - -目前在国内 `GPL` 协议**具备合同特征,是一种民事法律行为** ,属于我国《合同法》调整的范围。 `TopIAM` 项目团队保留诉讼权利。 - -[相关案例:违反 `GPL` 协议赔偿 50 万,国内首例!](https://mp.weixin.qq.com/s/YQ6sNjbDS-P7BViLZIsaoA) - -> **TopIAM 开源团队拥有对本开源协议的最终解释权。** - -## 在线演示 - -- 管理端:https://eiam-console.topiam.cn - > 体验账号:admin/topiam.cn -- 用户端:https://eiam-portal.topiam.cn - > 体验账号:portal/topiam.cn - -## 技术架构 - -- **后端**:[Spring Boot](https://spring.io/projects/spring-boot/) 、[Spring Security](https://spring.io/projects/spring-security/) -- **前端**:[React.js](https://react.dev/) 、[Ant Design](https://ant.design) -- **中间件**:[MySQL](https://www.mysql.com/) 、[Redis](https://redis.io/)、[ElasticSearch](https://www.elastic.co/cn/elasticsearch/)、[RabbitMQ](https://www.rabbitmq.com/) -- **基础设施**:[Docker](https://www.docker.com/) - -## 安装部署 - -- [本地部署](https://eiam.topiam.cn/docs/deployment/deployment-local/) -- [Docker部署](https://eiam.topiam.cn/docs/deployment/deployment-local/) -- [K8S部署](https://eiam.topiam.cn/docs/deployment/deployment-k8s/) -- [更多方式](https://eiam.topiam.cn/docs/deployment/) - -## 用户登记 - -如果您和您的公司或组织使用了 TopIAM 企业身份管控平台 ,非常感谢您的支持与信任,请在此进行登记,您的回复将成为维护者、社区用户和观望者的信心来源。感谢支持 💖 - -**我们会优先支持登记用户的需求及问题反馈。** - -> 登记信息仅用于推广本产品~ - -[点击进行接入登记](https://gitee.com/topiam/eiam/issues/I7SAJK) - -- 浙江智慧江能技术服务股份有限公司 -- 广东省印象华云数据有限公司 -- 宁波甬承电子科技有限公司 -- 山东爱特云翔信息技术有限公司 -- 北京中科生活服务有限公司 -- 四维世景北京(科技)有限公司 ++ 浙江智慧江能技术服务股份有限公司 ++ 广东省印象华云数据有限公司 ++ 宁波甬承电子科技有限公司 ++ 山东爱特云翔信息技术有限公司 ++ 北京中科生活服务有限公司 ++ 四维世景北京(科技)有限公司 ## 微信公众号 From bc9ed4e53562b9a6fd113016769ac2d7c957d660 Mon Sep 17 00:00:00 2001 From: smallbun <2689170096@qq.com> Date: Thu, 14 Sep 2023 18:18:00 +0800 Subject: [PATCH 4/4] =?UTF-8?q?:memo:=20=E7=89=88=E6=9D=83=E5=A3=B0?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 72d11df0..264229fe 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,9 @@ [相关案例:违反 `GPL` 协议赔偿 50 万,国内首例!](https://mp.weixin.qq.com/s/YQ6sNjbDS-P7BViLZIsaoA) -> **TopIAM 开源团队拥有对本开源协议的最终解释权。** +> 本项目采用 `AGPL` 开源协议(抄袭牟利索赔100万)。 + +> 使用必须遵守国家法律法规,不允许非法项目使用,后果自负。 ## 项目介绍