Как добавить вновь созданного пользователя в определенную группу безопасности в sensenet? - PullRequest
0 голосов
/ 02 февраля 2019

Когда пользователь регистрирует учетную запись в моем веб-приложении, я хотел бы, чтобы он был добавлен в группу безопасности, идентифицирующую пользователей, чтобы у них были необходимые разрешения для запуска моего веб-приложения.Это то, что я пробовал.

using SenseNet.ContentRepository.Storage;
using SenseNet.ContentRepository.Storage.Security;

namespace DerAssistantService.Actions
{
  public static class UserActions
  {
    [ODataAction]
    public static Content RegisterUser(Content content, string email, string password)
    {
        if (string.IsNullOrEmpty(email))
            throw new ArgumentNullException(nameof(email));
        if (string.IsNullOrEmpty(password))
            throw new ArgumentNullException(nameof(password));

        var username = email.Split('@').First();

        using (new SystemAccount())
        {
            var user = Content.CreateNew("User", content.ContentHandler, username);

            user["FullName"] = username;
            user["Email"] = email;
            user["LoginName"] = email;
            user["Enabled"] = true;
            user["Password"] = password;
            user.Save();

            var identifiedUsers = Node.Load<Group>("/Root/IMS/BuiltIn/Portal/IdentifiedUsers");
            identifiedUsers.AddMember(user); // Error because type Content is not of type IGroup 

            return user;
        }
     }
  }
}

1 Ответ

0 голосов
/ 02 февраля 2019

Метод AddMember класса группы ожидает экземпляр IUser или IGroup.Пользователь, которого вы создали ранее, относится к типу Content, который является типом оболочки, который использует sensenet для всего.Базовый бизнес-объект находится внутри этого объекта содержимого, его можно извлечь, используя свойство ContentHandler:

identifiedUsers.AddMember(user.ContentHandler as IUser); 

Объект Content представляет собой верхний общий уровень API, где вы можете найти поля, например.Нижний уровень, доступный свойству ContentHandler, представляет бизнес-уровень со строго типизированными классами, такими как User, File или Workspace.

...