以编程方式删除 Orchard 中的用户

Programatically delete a user in Orchard

我不是果园大师。我是一名桌面应用人员,肩负着很多责任,继承了一大堆 Orchard 代码,并负责一些维护工具。我试过用谷歌搜索互联网无济于事,所以我绝望地求助于 Stack,因为有人拥有 easy 按钮...

基本上(这是一个过度简化的用例)- 我们经常有用户使用错误输入的电子邮件地址注册 在一天内忘记他们的帐户信息 再次注册但胖指密码 然后 第三次注册,等等...

我有一个维护控制台,允许管理员 'locate' 数据(在我们自己的非果园 sql 表中)与第一个或第二个帐户(在我的示例中)相关联,然后重新将该数据与第三个 'current/correct' 帐户相关联。

在此重新映射结束时,我想以编程方式清理(阅读:删除)前两个帐户的 Orchard 登录名,现在正式为 kruft。

我在 Stack 上找到了一些关于 Orchard 用户帐户的信息:

Users are content types and Orchard creates content items for each user. When you create a new user Orchard adds records to xxx_Orchard_Users_UserPartRecord, xxx_Orchard_Framework_ContentItemRecord, xxx_Orchard_Framework_ContentItemVersionRecord and xxx_Orchard_Roles_UserRolesPartRecord if you linked any roles to the user.

The xxx_Orchard_Framework_ContentItemVersionRecord table keeps track of the version number and whether or not a content item is published or not and which version of the published content item is the latest.

When you delete the user Orchard does not delete the records from the tables, but simply creates a new version record and sets Published and Latest columns to 0 for the new version and the old version. Because there is no published and latest version the content item does not show up on the list of users.

我从概念上理解,但我不敢相信要删除一个用户,我需要从其中的每个 'private' 表中删除记录果园。相反,我希望有一个 class/method/technique 用于删除 Content Type 或 Part 或 Record 或其他任何东西(我仍然没有完全记住 Orchard 对象命名)。

任何人都可以分享一个在代码中删除用户的例子(通过 Id 或用户名或电子邮件)?或者给我指点相关文件?我在这里像一条离开水的鱼一样摸索着...

一如既往,提前致谢!

正如您所说,在 Orchard 中,UI 中的大多数删除都是软删除,保留所有数据并在数据库中设置一个标志,表明此人已被删除。要以编程方式执行此操作,其中 _contentManagerIContentManager.

的实例
var userItem = _contentManager.Get<IUser>(userId);
_contentManager.Remove(userItem);

要进行硬删除,这将删除项目记录、所有项目版本记录和所有内容部分记录(标题部分、用户部分等)

var userItem = _contentManager.Get<IUser>(userId);
_contentManager.Destroy(userItem);

这是在 1.9 版中添加到 orchard 中的。