创建用户配置文件

Create User Profile Piece

我想创建一个用户配置文件,它加入 apostrophe-user 以便管理员可以为特定用户创建 public 配置文件。我知道不推荐这样做,但我认为这是让这边的人拥有 public 个人资料并能够登录和编辑他们的个人资料的唯一选择。否则,管理员需要更改数百人的用户配置文件,这将导致全职工作。现在不需要用户注册,但将来可能需要,所以我的模块应该与 apsotrophe-signup 兼容。

开头很简单:

// lib/modules/profiles/index.js
module.exports = {
  extend: 'apostrophe-pieces',
  name: 'profile',
  label: 'Profile',
  pluralLabel: 'Profiles',
  slugPrefix: 'profile-',
  addFields: [
    {
        name: '_user',
        label: 'User',
        type: 'joinByOne',
        withType: 'apostrophe-user',
        idField: 'userId',
        withJoins: true
    }
  ]
};

这是棋子小部件:

// lib/modules/profiles-widgets/views/widget.html

{% for piece in data.widget._pieces %}
  <li class="collection-item avatar">

    {{ piece._user.username }}

    {{ piece._user.title }}

    {{ piece._user.firstName }}

    {{ piece._user.lastName }}

    {{ piece._user.email }}

    <img class="circle grey"
      src="{{ apos.attachments.url(piece._user._thumbnail.attachment, { size: data.options.size or 'one-sixth' }) }}"
      srcset="{{ apos.images.srcset(piece._user._thumbnail.attachment) }}"
      sizes="{{ '8vw' }}"
      alt="{{ piece._user._thumbnail.title }}"
    >

    {{ apos.area(piece._user, 'bio', { edit: false }) }}

  </li>
{% endfor %}

字段 _thumbnailbio 我添加到 apostrophe-user:

// lib/modules/apostrophe-users/index.js
module.exports = {
  beforeConstruct: function(self, options) {
      options.addFields = [
        {
          name: '_thumbnail',
          type: 'joinByOne',
          withType: 'apostrophe-image',
          label: 'Profile Picture',
          help: 'Choose profile picture',
          filters: {
            projection: {
              attachment: true,
              description: true,
              title: true
            }
          }
        },
        {
          name: 'bio',
          label: 'Biography',
          type: 'area',
          help: 'Choose Biography',
          options: {
            limit: 1,
            widgets: {
              'apostrophe-rich-text': {
                toolbar: [ 'Bold' ],
                controls: {
                  movable: false,
                  cloneable: false,
                  removable: true,
                  position: 'top-right'
                }
              }
            }
          }
        }
      ].concat(options.addFields || []);
  }
};

登录后,我会看到 widget.html 中定义的所有字段,但是如果我注销,则什么也看不到。我预计此原因 apostrophe-users 已被 取消发布。 我尝试将 published 字段添加到 apostrophe-user,但这没有成功。

// lib/modules/apostrophe-users/index.js
...

        {
          type: 'boolean',
          name: 'published',
          label: 'Published',
          def: true,
        },
...

我哪里做错了?

作为第二个问题,我想知道是否可以允许登录用户编辑他自己的个人资料?

在 Apostrophe 2 中不直接支持将用户用作公开可用数据。常见的解决方法是创建“配置文件”片段类型或类似的东西,然后添加连接以将其连接到用户(如果需要)帮助组织。

在用户模块上设置 adminOnly: false 您可以直接配置权限,但这会使围绕用户的安全问题成为您职责的一部分。

更新: 在这样的项目中写入 lib/modules/apostrophe-users/index.js 会将 published 字段添加回用户:

module.exports = {
  defaultRemoveFields: [],
  defaultRemoveFilters: [],
  defaultRemoveColumns: []
};

默认情况下,这些数组包括 'published',对 UI 隐藏发布选项。

一旦发布,它们将在注销时可见。同样,确保在执行此操作时考虑到安全隐患。