/* * Symphony - A modern community (forum/SNS/blog) platform written in Java. * Copyright (C) 2012-2017, b3log.org & hacpai.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.b3log.symphony.service; import org.b3log.latke.Keys; import org.b3log.latke.Latkes; import org.b3log.latke.ioc.inject.Inject; import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Logger; import org.b3log.latke.model.User; import org.b3log.latke.repository.Transaction; import org.b3log.latke.repository.jdbc.util.JdbcRepositories; import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.annotation.Service; import org.b3log.latke.util.Ids; import org.b3log.latke.util.Locales; import org.b3log.latke.util.MD5; import org.b3log.symphony.model.*; import org.b3log.symphony.repository.*; import org.b3log.symphony.util.Languages; import org.b3log.symphony.util.Symphonys; import org.json.JSONObject; import java.util.*; /** * Initialization management service. * * @author <a href="http://88250.b3log.org">Liang Ding</a> * @version 1.2.1.5, Feb 11, 2017 * @since 1.8.0 */ @Service public class InitMgmtService { /** * Logger. */ private static final Logger LOGGER = Logger.getLogger(InitMgmtService.class); private static Set<String> VISITOR_PERMISSIONS = new HashSet<>(); private static Set<String> DEFAULT_PERMISSIONS = new HashSet<>(); private static Set<String> MEMBER_PERMISSIONS = new HashSet<>(); private static Set<String> REGULAR_PERMISSIONS = new HashSet<>(); private static Set<String> ADMIN_PERMISSIONS = new HashSet<>(); private static Set<String> LEADER_PERMISSIONS = new HashSet<>(); static { // Init built-in roles' permissions, see https://github.com/b3log/symphony/issues/358 for more details // Visitor // no permissions at present // Default DEFAULT_PERMISSIONS.addAll(VISITOR_PERMISSIONS); DEFAULT_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_ADD_ARTICLE); DEFAULT_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_UPDATE_ARTICLE); DEFAULT_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_REMOVE_ARTICLE); DEFAULT_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_ADD_COMMENT); DEFAULT_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_UPDATE_COMMENT); DEFAULT_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_REMOVE_COMMENT); DEFAULT_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_THANK_ARTICLE); DEFAULT_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_THANK_COMMENT); DEFAULT_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_WATCH_ARTICLE); DEFAULT_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_FOLLOW_ARTICLE); // Member MEMBER_PERMISSIONS.addAll(DEFAULT_PERMISSIONS); MEMBER_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_GOOD_ARTICLE); MEMBER_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_BAD_ARTICLE); MEMBER_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_GOOD_COMMENT); MEMBER_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_BAD_COMMENT); MEMBER_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_AT_USER); MEMBER_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_USE_INVITATION_LINK); // Regular REGULAR_PERMISSIONS.addAll(MEMBER_PERMISSIONS); REGULAR_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_STICK_ARTICLE); REGULAR_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_ADD_ARTICLE_ANONYMOUS); REGULAR_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_ADD_COMMENT_ANONYMOUS); REGULAR_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_VIEW_ARTICLE_HISTORY); REGULAR_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_VIEW_COMMENT_HISTORY); REGULAR_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_AT_PARTICIPANTS); REGULAR_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMON_EXCHANGE_INVITATION_CODE); REGULAR_PERMISSIONS.add(Permission.PERMISSION_ID_C_TAG_UPDATE_TAG_BASIC); REGULAR_PERMISSIONS.add(Permission.PERMISSION_ID_C_MENU_ADMIN); REGULAR_PERMISSIONS.add(Permission.PERMISSION_ID_C_MENU_ADMIN_TAGS); // Leader LEADER_PERMISSIONS.addAll(REGULAR_PERMISSIONS); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_USER_ADD_USER); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_USER_UPDATE_USER_BASIC); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_USER_UPDATE_USER_ADVANCED); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_ARTICLE_UPDATE_ARTICLE_BASIC); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_ARTICLE_STICK_ARTICLE); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_ARTICLE_CANCEL_STICK_ARTICLE); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_ARTICLE_REINDEX_ARTICLE_INDEX); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMENT_UPDATE_COMMENT_BASIC); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_USER_ADD_POINT); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_USER_EXCHANGE_POINT); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_USER_DEDUCT_POINT); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_IC_GEN_IC); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_IC_UPDATE_IC_BASIC); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_RW_ADD_RW); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_RW_UPDATE_RW_BASIC); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_RW_REMOVE_RW); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_MENU_ADMIN_USERS); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_MENU_ADMIN_ARTICLES); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_MENU_ADMIN_COMMENTS); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_MENU_ADMIN_ICS); LEADER_PERMISSIONS.add(Permission.PERMISSION_ID_C_MENU_ADMIN_RWS); // Admin ADMIN_PERMISSIONS.addAll(LEADER_PERMISSIONS); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_ARTICLE_ADD_ARTICLE); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_ARTICLE_REINDEX_ARTICLES_INDEX); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_ARTICLE_REMOVE_ARTICLE); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_COMMENT_REMOVE_COMMENT); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_DOMAIN_ADD_DOMAIN); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_DOMAIN_ADD_DOMAIN_TAG); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_DOMAIN_REMOVE_DOMAIN); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_DOMAIN_REMOVE_DOMAIN_TAG); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_DOMAIN_UPDATE_DOMAIN_BASIC); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_AD_UPDATE_SIDE); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_AD_UPDATE_BANNER); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_MISC_ALLOW_ADD_ARTICLE); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_MISC_ALLOW_ADD_COMMENT); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_MISC_ALLOW_ANONYMOUS_VIEW); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_MISC_LANGUAGE); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_MISC_REGISTER_METHOD); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_MENU_ADMIN_DOMAINS); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_MENU_ADMIN_AD); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_MENU_ADMIN_ROLES); ADMIN_PERMISSIONS.add(Permission.PERMISSION_ID_C_MENU_ADMIN_MISC); } /** * Permission repository. */ @Inject private PermissionRepository permissionRepository; /** * Role repository. */ @Inject private RoleRepository roleRepository; /** * Role-permission repository. */ @Inject private RolePermissionRepository rolePermissionRepository; /** * Option repository. */ @Inject private OptionRepository optionRepository; /** * Tag repository. */ @Inject private TagRepository tagRepository; /** * Tag management service. */ @Inject private TagMgmtService tagMgmtService; /** * Article management service. */ @Inject private ArticleMgmtService articleMgmtService; /** * User management service. */ @Inject private UserMgmtService userMgmtService; /** * User query service. */ @Inject private UserQueryService userQueryService; /** * Initializes Sym if first time setup. */ public void initSym() { try { final List<JSONObject> admins = userQueryService.getAdmins(); if (null != admins && !admins.isEmpty()) { // Initialized already return; } } catch (final ServiceException e) { LOGGER.log(Level.ERROR, "Check init error", e); System.exit(0); } LOGGER.info("It's your first time setup Sym, initializes Sym...."); try { LOGGER.log(Level.INFO, "Database [{0}], creating all tables", Latkes.getRuntimeDatabase()); final List<JdbcRepositories.CreateTableResult> createTableResults = JdbcRepositories.initAllTables(); for (final JdbcRepositories.CreateTableResult createTableResult : createTableResults) { LOGGER.log(Level.INFO, "Creates table result[tableName={0}, isSuccess={1}]", new Object[]{createTableResult.getName(), createTableResult.isSuccess()}); } final Transaction transaction = optionRepository.beginTransaction(); // Init statistic JSONObject option = new JSONObject(); option.put(Keys.OBJECT_ID, Option.ID_C_STATISTIC_MEMBER_COUNT); option.put(Option.OPTION_VALUE, "0"); option.put(Option.OPTION_CATEGORY, Option.CATEGORY_C_STATISTIC); optionRepository.add(option); option = new JSONObject(); option.put(Keys.OBJECT_ID, Option.ID_C_STATISTIC_CMT_COUNT); option.put(Option.OPTION_VALUE, "0"); option.put(Option.OPTION_CATEGORY, Option.CATEGORY_C_STATISTIC); optionRepository.add(option); option = new JSONObject(); option.put(Keys.OBJECT_ID, Option.ID_C_STATISTIC_ARTICLE_COUNT); option.put(Option.OPTION_VALUE, "0"); option.put(Option.OPTION_CATEGORY, Option.CATEGORY_C_STATISTIC); optionRepository.add(option); option = new JSONObject(); option.put(Keys.OBJECT_ID, Option.ID_C_STATISTIC_DOMAIN_COUNT); option.put(Option.OPTION_VALUE, "0"); option.put(Option.OPTION_CATEGORY, Option.CATEGORY_C_STATISTIC); optionRepository.add(option); option = new JSONObject(); option.put(Keys.OBJECT_ID, Option.ID_C_STATISTIC_TAG_COUNT); option.put(Option.OPTION_VALUE, "0"); option.put(Option.OPTION_CATEGORY, Option.CATEGORY_C_STATISTIC); optionRepository.add(option); option = new JSONObject(); option.put(Keys.OBJECT_ID, Option.ID_C_STATISTIC_LINK_COUNT); option.put(Option.OPTION_VALUE, "0"); option.put(Option.OPTION_CATEGORY, Option.CATEGORY_C_STATISTIC); optionRepository.add(option); option = new JSONObject(); option.put(Keys.OBJECT_ID, Option.ID_C_STATISTIC_MAX_ONLINE_VISITOR_COUNT); option.put(Option.OPTION_VALUE, "0"); option.put(Option.OPTION_CATEGORY, Option.CATEGORY_C_STATISTIC); optionRepository.add(option); // Init misc option = new JSONObject(); option.put(Keys.OBJECT_ID, Option.ID_C_MISC_ALLOW_REGISTER); option.put(Option.OPTION_VALUE, "0"); option.put(Option.OPTION_CATEGORY, Option.CATEGORY_C_MISC); optionRepository.add(option); option = new JSONObject(); option.put(Keys.OBJECT_ID, Option.ID_C_MISC_ALLOW_ANONYMOUS_VIEW); option.put(Option.OPTION_VALUE, "0"); option.put(Option.OPTION_CATEGORY, Option.CATEGORY_C_MISC); optionRepository.add(option); option = new JSONObject(); option.put(Keys.OBJECT_ID, Option.ID_C_MISC_ALLOW_ADD_ARTICLE); option.put(Option.OPTION_VALUE, "0"); option.put(Option.OPTION_CATEGORY, Option.CATEGORY_C_MISC); optionRepository.add(option); option = new JSONObject(); option.put(Keys.OBJECT_ID, Option.ID_C_MISC_ALLOW_ADD_COMMENT); option.put(Option.OPTION_VALUE, "0"); option.put(Option.OPTION_CATEGORY, Option.CATEGORY_C_MISC); optionRepository.add(option); option = new JSONObject(); option.put(Keys.OBJECT_ID, Option.ID_C_MISC_LANGUAGE); option.put(Option.OPTION_VALUE, "0"); // user browser option.put(Option.OPTION_CATEGORY, Option.CATEGORY_C_MISC); optionRepository.add(option); // Init permissions final JSONObject permission = new JSONObject(); // ad management permissions permission.put(Permission.PERMISSION_CATEGORY, Permission.PERMISSION_CATEGORY_C_AD); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_AD_UPDATE_SIDE); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_AD_UPDATE_BANNER); permissionRepository.add(permission); // article management permissions permission.put(Permission.PERMISSION_CATEGORY, Permission.PERMISSION_CATEGORY_C_ARTICLE); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_ARTICLE_ADD_ARTICLE); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_ARTICLE_CANCEL_STICK_ARTICLE); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_ARTICLE_REINDEX_ARTICLES_INDEX); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_ARTICLE_REINDEX_ARTICLE_INDEX); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_ARTICLE_REMOVE_ARTICLE); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_ARTICLE_STICK_ARTICLE); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_ARTICLE_UPDATE_ARTICLE_BASIC); permissionRepository.add(permission); // comment management permissions permission.put(Permission.PERMISSION_CATEGORY, Permission.PERMISSION_CATEGORY_C_COMMENT); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMENT_REMOVE_COMMENT); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMENT_UPDATE_COMMENT_BASIC); permissionRepository.add(permission); // common permissions permission.put(Permission.PERMISSION_CATEGORY, Permission.PERMISSION_CATEGORY_C_COMMON); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_ADD_ARTICLE); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_ADD_ARTICLE_ANONYMOUS); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_UPDATE_ARTICLE); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_REMOVE_ARTICLE); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_ADD_COMMENT); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_ADD_COMMENT_ANONYMOUS); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_UPDATE_COMMENT); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_REMOVE_COMMENT); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_VIEW_COMMENT_HISTORY); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_AT_USER); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_AT_PARTICIPANTS); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_BAD_ARTICLE); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_BAD_COMMENT); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_EXCHANGE_INVITATION_CODE); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_FOLLOW_ARTICLE); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_WATCH_ARTICLE); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_GOOD_ARTICLE); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_GOOD_COMMENT); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_STICK_ARTICLE); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_THANK_ARTICLE); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_THANK_COMMENT); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_USE_INVITATION_LINK); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_COMMON_VIEW_ARTICLE_HISTORY); permissionRepository.add(permission); // domain management permissions permission.put(Permission.PERMISSION_CATEGORY, Permission.PERMISSION_CATEGORY_C_DOMAIN); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_DOMAIN_ADD_DOMAIN); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_DOMAIN_ADD_DOMAIN_TAG); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_DOMAIN_REMOVE_DOMAIN); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_DOMAIN_REMOVE_DOMAIN_TAG); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_DOMAIN_UPDATE_DOMAIN_BASIC); permissionRepository.add(permission); // invitecode management permissions permission.put(Permission.PERMISSION_CATEGORY, Permission.PERMISSION_CATEGORY_C_IC); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_IC_GEN_IC); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_IC_UPDATE_IC_BASIC); permissionRepository.add(permission); // misc management permissions permission.put(Permission.PERMISSION_CATEGORY, Permission.PERMISSION_CATEGORY_C_MISC); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_MISC_ALLOW_ADD_ARTICLE); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_MISC_ALLOW_ADD_COMMENT); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_MISC_ALLOW_ANONYMOUS_VIEW); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_MISC_LANGUAGE); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_MISC_REGISTER_METHOD); permissionRepository.add(permission); // reserved word management permissions permission.put(Permission.PERMISSION_CATEGORY, Permission.PERMISSION_CATEGORY_C_RESERVED_WORD); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_RW_ADD_RW); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_RW_REMOVE_RW); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_RW_UPDATE_RW_BASIC); permissionRepository.add(permission); // tag management permissions permission.put(Permission.PERMISSION_CATEGORY, Permission.PERMISSION_CATEGORY_C_TAG); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_TAG_UPDATE_TAG_BASIC); permissionRepository.add(permission); // user management permissions permission.put(Permission.PERMISSION_CATEGORY, Permission.PERMISSION_CATEGORY_C_USER); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_USER_ADD_POINT); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_USER_ADD_USER); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_USER_DEDUCT_POINT); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_USER_EXCHANGE_POINT); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_USER_UPDATE_USER_ADVANCED); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_USER_UPDATE_USER_BASIC); permissionRepository.add(permission); // menu permissions permission.put(Permission.PERMISSION_CATEGORY, Permission.PERMISSION_CATEGORY_C_MENU); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_MENU_ADMIN_AD); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_MENU_ADMIN); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_MENU_ADMIN_ARTICLES); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_MENU_ADMIN_COMMENTS); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_MENU_ADMIN_DOMAINS); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_MENU_ADMIN_ICS); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_MENU_ADMIN_RWS); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_MENU_ADMIN_TAGS); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_MENU_ADMIN_USERS); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_MENU_ADMIN_MISC); permissionRepository.add(permission); permission.put(Keys.OBJECT_ID, Permission.PERMISSION_ID_C_MENU_ADMIN_ROLES); permissionRepository.add(permission); // Init roles final JSONObject role = new JSONObject(); role.put(Keys.OBJECT_ID, Role.ROLE_ID_C_ADMIN); role.put(Role.ROLE_NAME, "Admin"); role.put(Role.ROLE_DESCRIPTION, ""); roleRepository.add(role); role.put(Keys.OBJECT_ID, Role.ROLE_ID_C_DEFAULT); role.put(Role.ROLE_NAME, "Default"); role.put(Role.ROLE_DESCRIPTION, ""); roleRepository.add(role); role.put(Keys.OBJECT_ID, Role.ROLE_ID_C_LEADER); role.put(Role.ROLE_NAME, "Leader"); role.put(Role.ROLE_DESCRIPTION, ""); roleRepository.add(role); role.put(Keys.OBJECT_ID, Role.ROLE_ID_C_MEMBER); role.put(Role.ROLE_NAME, "Member"); role.put(Role.ROLE_DESCRIPTION, ""); roleRepository.add(role); role.put(Keys.OBJECT_ID, Role.ROLE_ID_C_REGULAR); role.put(Role.ROLE_NAME, "Regular"); role.put(Role.ROLE_DESCRIPTION, ""); roleRepository.add(role); role.put(Keys.OBJECT_ID, Role.ROLE_ID_C_VISITOR); role.put(Role.ROLE_NAME, "Visitor"); role.put(Role.ROLE_DESCRIPTION, ""); roleRepository.add(role); // Init Role-Permission final JSONObject rolePermission = new JSONObject(); // [Default] role's permissions rolePermission.put(Role.ROLE_ID, Role.ROLE_ID_C_DEFAULT); for (final String permissionId : DEFAULT_PERMISSIONS) { rolePermission.put(Keys.OBJECT_ID, Ids.genTimeMillisId()); rolePermission.put(Permission.PERMISSION_ID, permissionId); rolePermissionRepository.add(rolePermission); } // [Member] role's permissions rolePermission.put(Role.ROLE_ID, Role.ROLE_ID_C_MEMBER); for (final String permissionId : MEMBER_PERMISSIONS) { rolePermission.put(Keys.OBJECT_ID, Ids.genTimeMillisId()); rolePermission.put(Permission.PERMISSION_ID, permissionId); rolePermissionRepository.add(rolePermission); } // [Regular] role's permissions rolePermission.put(Role.ROLE_ID, Role.ROLE_ID_C_REGULAR); for (final String permissionId : REGULAR_PERMISSIONS) { rolePermission.put(Keys.OBJECT_ID, Ids.genTimeMillisId()); rolePermission.put(Permission.PERMISSION_ID, permissionId); rolePermissionRepository.add(rolePermission); } // [Leader] role's permissions rolePermission.put(Role.ROLE_ID, Role.ROLE_ID_C_LEADER); for (final String permissionId : LEADER_PERMISSIONS) { rolePermission.put(Keys.OBJECT_ID, Ids.genTimeMillisId()); rolePermission.put(Permission.PERMISSION_ID, permissionId); rolePermissionRepository.add(rolePermission); } // [Admin] role's permissions rolePermission.put(Role.ROLE_ID, Role.ROLE_ID_C_ADMIN); for (final String permissionId : ADMIN_PERMISSIONS) { rolePermission.put(Keys.OBJECT_ID, Ids.genTimeMillisId()); rolePermission.put(Permission.PERMISSION_ID, permissionId); rolePermissionRepository.add(rolePermission); } transaction.commit(); // Init admin final JSONObject admin = new JSONObject(); admin.put(User.USER_EMAIL, "sym@b3log.org"); admin.put(User.USER_NAME, "admin"); admin.put(User.USER_PASSWORD, MD5.hash("admin")); final Locale defaultLocale = Locale.getDefault(); final String lang = Locales.getLanguage(defaultLocale.toString()); final String country = Locales.getCountry(defaultLocale.toString()); String language = lang + "_" + country; if (!Languages.getAvailableLanguages().contains(language)) { language = "en_US"; } admin.put(UserExt.USER_LANGUAGE, language); admin.put(User.USER_ROLE, Role.ROLE_ID_C_ADMIN); admin.put(UserExt.USER_STATUS, UserExt.USER_STATUS_C_VALID); admin.put(UserExt.USER_GUIDE_STEP, UserExt.USER_GUIDE_STEP_FIN); final String adminId = userMgmtService.addUser(admin); admin.put(Keys.OBJECT_ID, adminId); // Init default commenter (for sync comment from client) final JSONObject defaultCommenter = new JSONObject(); defaultCommenter.put(User.USER_EMAIL, UserExt.DEFAULT_CMTER_EMAIL); defaultCommenter.put(User.USER_NAME, UserExt.DEFAULT_CMTER_NAME); defaultCommenter.put(User.USER_PASSWORD, MD5.hash(String.valueOf(new Random().nextInt()))); defaultCommenter.put(UserExt.USER_LANGUAGE, "en_US"); defaultCommenter.put(UserExt.USER_GUIDE_STEP, UserExt.USER_GUIDE_STEP_FIN); defaultCommenter.put(User.USER_ROLE, UserExt.DEFAULT_CMTER_ROLE); defaultCommenter.put(UserExt.USER_STATUS, UserExt.USER_STATUS_C_VALID); userMgmtService.addUser(defaultCommenter); // Add tags String tagTitle = Symphonys.get("systemAnnounce"); String tagId = tagMgmtService.addTag(adminId, tagTitle); JSONObject tag = tagRepository.get(tagId); tag.put(Tag.TAG_URI, "announcement"); tagMgmtService.updateTag(tagId, tag); tagTitle = "Sym"; tagId = tagMgmtService.addTag(adminId, tagTitle); tag = tagRepository.get(tagId); tag.put(Tag.TAG_URI, "Sym"); tag.put(Tag.TAG_ICON_PATH, "sym.png"); tag.put(Tag.TAG_DESCRIPTION, "[Sym](https://github.com/b3log/symphony) 是一个用 [Java] 实现的现代化社区(论坛/社交网络/博客)平台,“下一代的社区系统,为未来而构建”。"); tagMgmtService.updateTag(tagId, tag); tagTitle = "B3log"; tagId = tagMgmtService.addTag(adminId, tagTitle); tag = tagRepository.get(tagId); tag.put(Tag.TAG_URI, "B3log"); tag.put(Tag.TAG_ICON_PATH, "b3log.png"); tag.put(Tag.TAG_DESCRIPTION, "[B3log](http://b3log.org) 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 [B3log 构思](https://hacpai.com/b3log)。目前 B3log 已经开源了多款产品: [Solo] 、 [Sym] 、 [Wide] 。"); tagMgmtService.updateTag(tagId, tag); // Hello World! final JSONObject article = new JSONObject(); article.put(Article.ARTICLE_TITLE, "Welcome to Sym community ♥"); article.put(Article.ARTICLE_TAGS, "Sym,Announcement"); article.put(Article.ARTICLE_CONTENT, "Hello, everyone!"); article.put(Article.ARTICLE_EDITOR_TYPE, 0); article.put(Article.ARTICLE_AUTHOR_ID, admin.optString(Keys.OBJECT_ID)); article.put(Article.ARTICLE_T_IS_BROADCAST, false); articleMgmtService.addArticle(article); LOGGER.info("Initialized Sym, have fun :)"); } catch (final Exception e) { LOGGER.log(Level.ERROR, "Initializes Sym failed", e); System.exit(0); } } }