private static LayoutSet _getParentLayoutSet(LayoutSet layoutSet) throws Exception {

    Group group = layoutSet.getGroup();

    if (group.isSite()) {
      Group parentGroup = group.getParentGroup();

      if (parentGroup != null) {
        return LayoutSetLocalServiceUtil.getLayoutSet(
            parentGroup.getGroupId(), layoutSet.isPrivateLayout());
      }
    } else if (group.isUser()) {
      User user = UserLocalServiceUtil.getUser(group.getClassPK());

      List<Organization> organizations =
          OrganizationLocalServiceUtil.getUserOrganizations(user.getUserId());

      if (!organizations.isEmpty()) {
        Organization organization = organizations.get(0);

        Group parentGroup = organization.getGroup();

        return LayoutSetLocalServiceUtil.getLayoutSet(
            parentGroup.getGroupId(), layoutSet.isPrivateLayout());
      }
    }

    return null;
  }
  @Override
  public void checkBaseModel(
      PermissionChecker permissionChecker, long groupId, long primaryKey, String actionId)
      throws PortalException {

    List<Organization> organizations =
        OrganizationLocalServiceUtil.getUserOrganizations(primaryKey);

    long[] organizationsIds = new long[organizations.size()];

    for (int i = 0; i < organizations.size(); i++) {
      Organization organization = organizations.get(i);

      organizationsIds[i] = organization.getOrganizationId();
    }

    check(permissionChecker, primaryKey, organizationsIds, actionId);
  }
  @Override
  public boolean isDisabled(Object obj) {
    Organization organization = (Organization) obj;

    try {
      PasswordPolicyRel passwordPolicyRel =
          PasswordPolicyRelLocalServiceUtil.fetchPasswordPolicyRel(
              Organization.class.getName(), organization.getOrganizationId());

      if ((passwordPolicyRel != null)
          && (passwordPolicyRel.getPasswordPolicyId() != _passwordPolicy.getPasswordPolicyId())) {

        return true;
      }
    } catch (Exception e) {
      _log.error(e, e);
    }

    return false;
  }
  @Override
  public String getOnClick() {
    StringBundler sb = new StringBundler(4);

    try {
      PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();

      sb.append(portletDisplay.getNamespace());

      sb.append("deleteOrganization('");

      Organization organization = ActionUtil.getOrganization(portletRequest);

      sb.append(organization.getOrganizationId());

      sb.append("');");
    } catch (Exception e) {
    }

    return sb.toString();
  }
  @Override
  public boolean contains(
      PermissionChecker permissionChecker, long userId, long[] organizationIds, String actionId) {

    try {
      User user = null;

      if (userId != ResourceConstants.PRIMKEY_DNE) {
        user = UserLocalServiceUtil.getUserById(userId);

        if ((actionId.equals(ActionKeys.DELETE)
                || actionId.equals(ActionKeys.IMPERSONATE)
                || actionId.equals(ActionKeys.PERMISSIONS)
                || actionId.equals(ActionKeys.UPDATE)
                || actionId.equals(ActionKeys.VIEW))
            && !permissionChecker.isOmniadmin()
            && (PortalUtil.isOmniadmin(user)
                || (!permissionChecker.isCompanyAdmin() && PortalUtil.isCompanyAdmin(user)))) {

          return false;
        }

        Contact contact = user.getContact();

        if (permissionChecker.hasOwnerPermission(
                permissionChecker.getCompanyId(),
                User.class.getName(),
                userId,
                contact.getUserId(),
                actionId)
            || (permissionChecker.getUserId() == userId)) {

          return true;
        }
      }

      if (permissionChecker.hasPermission(0, User.class.getName(), userId, actionId)) {

        return true;
      }

      if (user == null) {
        return false;
      }

      if (organizationIds == null) {
        organizationIds = user.getOrganizationIds();
      }

      for (long organizationId : organizationIds) {
        Organization organization = OrganizationLocalServiceUtil.getOrganization(organizationId);

        if (OrganizationPermissionUtil.contains(
            permissionChecker, organization, ActionKeys.MANAGE_USERS)) {

          if (permissionChecker.getUserId() == user.getUserId()) {
            return true;
          }

          Group organizationGroup = organization.getGroup();

          // Organization administrators can only manage normal users.
          // Owners can only manage normal users and administrators.

          if (UserGroupRoleLocalServiceUtil.hasUserGroupRole(
              user.getUserId(),
              organizationGroup.getGroupId(),
              RoleConstants.ORGANIZATION_OWNER,
              true)) {

            continue;
          } else if (UserGroupRoleLocalServiceUtil.hasUserGroupRole(
                  user.getUserId(),
                  organizationGroup.getGroupId(),
                  RoleConstants.ORGANIZATION_ADMINISTRATOR,
                  true)
              && !UserGroupRoleLocalServiceUtil.hasUserGroupRole(
                  permissionChecker.getUserId(),
                  organizationGroup.getGroupId(),
                  RoleConstants.ORGANIZATION_OWNER,
                  true)) {

            continue;
          }

          return true;
        }
      }
    } catch (Exception e) {
      _log.error(e, e);
    }

    return false;
  }