strykeslammerii/selftermination-sprinkle

这是一个UserFrosting插件,提供以下功能:1) 在删除账户时删除基本用户个人信息 2) 提供一个按钮让用户删除自己的账户

安装: 19

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 1

分支: 0

公开问题: 1

类型:userfrosting-sprinkle

v0.3.0-p4 2024-05-05 18:09 UTC

This package is auto-updated.

Last update: 2024-09-05 18:54:19 UTC


README

这个UserFrosting插件执行以下两项操作

  1. 在删除账户时隐藏基本用户个人信息
  2. 为每个用户提供一个按钮,以便他们可以删除自己的账户。

安装说明

在Sprinkle配方中包含 SelfTermination::class

  use SelfTermination\Sprinkle\SelfTermination;
  ...
  public function getSprinkles(): array
  {
      return [
//        Core::class,
//        Account::class,
//        Admin::class,
//        AdminLTE::class,
		        SelfTermination::class,
        ];
    }

composer.json 中包含 strykeslammerii/selftermination-sprinkle

    "require": {
        ...
	  "strykeslammerii/selftermination-sprinkle": "^0.3"
    },

package.json 中包含 strykeslammerii/selftermination-sprinkle

    "dependencies": {
        "@userfrosting/sprinkle-admin": "~5.1.0",
        "@userfrosting/theme-adminlte": "~5.1.0",
	 "selftermination-sprinkle": "StrykeSlammerII/UF-sprinkle-selftermination"
    },

webpack.config.js 中包含 'selftermination-sprinkle/webpack.entries'

const sprinkles = {
    AdminLTE: require('@userfrosting/theme-adminlte/webpack.entries'),
    Admin: require('@userfrosting/sprinkle-admin/webpack.entries'),
    SelfTermination: require('selftermination-sprinkle/webpack.entries'),
    App: require('./webpack.entries')
}

安装 SelfTermination\Sprinkle\Database\Seeds\SelfTerminationPermission 种子

首先,在Bakery中

$ php bakery seed
Seeder
======
 Select seed(s) to run. Multiple seeds can be selected using comma separated values:
  [0] UserFrosting\Sprinkle\Account\Database\Seeds\DefaultGroups
  [1] UserFrosting\Sprinkle\Account\Database\Seeds\DefaultPermissions
  [2] UserFrosting\Sprinkle\Account\Database\Seeds\DefaultRoles
  [3] SelfTermination\Sprinkle\Database\Seeds\SelfTerminationPermission
 > 3

然后,通过UF的用户管理UI添加到适当的角色中

更详细地说

隐藏个人信息

基本的UF只进行软删除用户。这允许用户取消删除,并保留他们的个人信息在用户数据库中。

  • 这个插件覆盖了 delete('/u/{user_name}') 路由,以 隐藏 用户邮箱(到 "redacted".$user->id."@test.com"),用户名(到 "redacted".$user->id),以及姓名(两个都到 "redacted")在用户数据库中。

    • 隐藏的邮箱和用户名保留用户ID号,以防对删除有疑问。关于这种缺乏隐藏的讨论会受到欢迎。
  • 用户密码的散列值也改为使用 bin2hex(random_bytes(1)) 的两个字条目,这应该太短,不能与应用程序检查的任何密码匹配。

  • 活动日志记录为隐藏的用户名;要么是 "redacted15 自删除",要么是 "User Admin_Alice 删除了 redacted15 的账户"。

    • 现有的活动日志不会隐藏。它们目前完全作为字符串存储,包含用户数据 嵌入 其中,而不是 引用 他们所指的用户。
    • 搜索和替换或完全重构活动日志系统都超出了这个插件的范围。欢迎提出解决这个问题的拉取请求。
    • 使用此插件的用户应了解其系统其他地方存储的用户个人信息的方式。 此插件可以扩展以适应其他用例,但它本身不搜索并隐藏可能由其他插件生成或存储的个人信息。
      • 具体来说,我们上面提到了两种存储个人信息的方式:"引用" 和 "嵌入"。生成自己嵌入个人数据的插件需要额外的工作来隐藏这些数据。
      • 如果允许用户内容,用户通常会提到彼此的名字。 @提及可能已经被提取并用作引用用户的手段,但昵称或缩写会被视为任何其他文本。以我自己为例:@StrykeSlammerII 明显是我。即使搜索和替换也会很容易找到这些。但是, Strike 不是一个有效的 @提及,它是一个 不应该 在所有用户评论中隐藏的 "正常" 单词!
  • 然后按照常规进行软删除。但是,取消删除不能撤销隐藏,在账户 "恢复" 之前需要设置新密码。

  • 理论上,即使删除的账户也可能被第三方盗用:他们需要访问管理员用户或用户数据库。如果在用户可以互动的环境中使用了这个功能,重要的是要确保删除用户之间的连接和互动……并且考虑使用硬删除而不是软删除。

自我删除

此按钮需要将自我终止权限(包括)添加到用户的角色中(这个功能不会尝试这么做!)按钮位于“我的账户”页面底部。它看起来更像是一个链接,而不是按钮——但它只会弹出一个“您确定吗?”模态框,带有正确的是/否按钮,类似于管理员“删除用户”模态框的方式。

继续前进

这是我第二个功能,我确信有很多不良做法和不效率的地方。它甚至没有任何单元或集成测试!手动测试让我认为基本功能是正常的。我正在将其用于我的主要项目,所以如果我发现问题,我会修复它们,但我没有计划仅仅为了这个功能而工作。

欢迎提交拉取请求,尽管其他项目可能更喜欢分叉并扩展这个功能以进行额外的删除。

本地化

这主要是一个个人项目,我是一人独大的……所以任何我添加的消息都不会本地化。再次欢迎提交拉取请求!