Access control & data security
Authentication and authorization mechanisms in your chat app let you decide who can access what resources based on identity and permissions.
Additonal security measures let you send and receive messages and files through your chat app, preventing unauthorized users from accessing that data.
User authentication
In your chat app, you need to have a process of verifying the identity of all users, ensuring that they are who they claim to be.
Unreal Chat SDK doesn't provide a built-in authentication mechanism, and you'll need to implement user verification in your app on your own. Typically, this could involve a login system where users provide their credentials (username and password), token-based authentication, Single Sign-On (SSO), two-factor authentication (2FA), or external authentication services like OAuth.
User authorization
A chat app will require an authorization mechanism granting or denying access to specific PubNub resources or functionalities based on the authenticated user's permissions and privileges.
This way, you don't let your chat users delete or modify each other's metadata, publish messages on private channels, or remove messages that other chat members wrote.
Unreal Chat SDK provides authorization in your chat app through Access Manager - a secure, token-based permission administrator that lets you regulate clients' access to such PubNub resources as channels and users. By making a single call to Access Manager API, you can define multiple user permissions saying who can do what with your client or server app data.
Depending on whether you create a client or server app, there are three possible actors involved in the authorization cycle: PubNub (server), your own server, and a client device. For more details, read the authorization workflow.
Access Manager
Access Manager is available in Unreal SDK, not Unreal Chat SDK.
Token permissions
When you use Access Manager, your client application will receive a token that governs the access levels and types of operations you can perform. The AccessManager->CanI()
method checks if a client has permissions to perform a specific action on a given resource.
Method signature
- Blueprint
- C++ / Input parameters
AccessManager->CanI(
EPubnubAccessManagerPermission Permission, EPubnubAccessManagerResourceType ResourceType,
FString ResourceName
);
Parameter | Type | Required | Description |
---|---|---|---|
User | EPubnubAccessManagerPermission | Yes | The operation type to check if the current user has permissions for. |
ChannelID | EPubnubAccessManagerResourceType | Yes | The resource type to check if the current user has permissions for. |
ResourceName | FString | Yes | The name of the resource, for example, a channel name or a user ID. |
EPubnubAccessManagerPermission
Enum Value | Description |
---|---|
PAMP_READ | Read permission for a channel. |
PAMP_WRITE | Write permission for a channel. |
PAMP_MANAGE | Manage permission for a channel. |
PAMP_DELETE | Delete permission for a channel. |
PAMP_GET | Permission to get details of a channel. |
PAMP_JOIN | Permission to join a channel. |
PAMP_UPDATE | Permission to update a channel's details. |
EPubnubAccessManagerResourceType
Enum Value | Description |
---|---|
PAMRT_UUIDS | Resource type for UUIDs. |
PAMRT_CHANNELS | Resource type for Channels. |
Output
Type | Description |
---|---|
bool | Whether or not the client has permissions to perform the requested operation on the requested resource. |
Basic usage
Check if the current user can send messages to the customer_XYZ
channel.
#include "Kismet/GameplayStatics.h"
#include "PubnubChatSubsystem.h"
#include "PubnubAccessManager.h"
UGameInstance* GameInstance = UGameplayStatics::GetGameInstance(ContextObject);
UPubnubChatSubsystem* PubnubChatSubsystem = GameInstance->GetSubsystem<UPubnubChatSubsystem>();
UPubnubChat* Chat = PubnubChatSubsystem->InitChat("demo", "demo", "my_user");
// Get the Access Manager
UPubnubAccessManager* AccessManager = Chat->GetAccessManager();
// Define the channel name and resource type
FString ChannelName = "customer_XYZ";
EPubnubAccessManagerResourceType ResourceType = EPubnubAccessManagerResourceType::PAMRT_CHANNELS;
show all 20 lines