Уведомление на основе ролей, наряду с группами, использующими Signalr в MVC 5 - PullRequest
1 голос
/ 21 февраля 2020

Я новичок в signalR и мне нужно создать приложение, в котором много пользователей имеют много ролей, и должно быть три канала отправки уведомлений клиентам 1. Publi c (используется для всех) 2. Частный ( Отправка уведомления одному лицу) 3. Группа и подгруппа (Отправка уведомления лицам, которые являются членами какой-либо группы или подгруппы)

Проблема в том, что я не могу понять различие пользователей в SignalR и не получаю концепция групп.

Кто-нибудь, пожалуйста, направьте меня

1 Ответ

0 голосов
/ 21 февраля 2020

Прежде всего, вы можете начать читать документацию Microsoft о группах. Затем вы можете прочитать документацию по авторизации , чтобы иметь возможность создавать группы и управлять пользователями для каждой роли.

Что вы можете сделать, это когда клиент подключается к концентратору и предполагает, что Вы знаете роль пользователей (используя контекст и авторизацию), и вы добавите их в эти 3 группы.

Тогда легко отправить сообщение этим группам, у вас есть такие примеры везде в stackOverflow и в inte rnet.

Надеюсь, это вам поможет.

Пример кода:

/// <summary>
/// Called when a new connection is established with the hub.
/// </summary>
/// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns>
public override async Task OnConnectedAsync()
{
    // 1. Add the use to the public group

    await this.Groups.AddToGroupAsync("PublicGroup", this.Context.ConnectionId);

    // 2. Add user to the private channel, single person

    await this.Groups.AddToGroupAsync(this.Context.User.Identity.Name, this.Context.ConnectionId);

    if (this.Context.User.IsInRole("Admin"))
    {
        // 3. Add the user to the Admin group

        await this.Groups.AddToGroupAsync("Admin", this.Context.ConnectionId);   
    }

    // add to other groups...

    await base.OnConnectedAsync();
}
...