using System.Threading.Tasks;
namespace Timeline.Services.User
{
    public interface IUserPermissionService
    {
        /// 
        /// Get permissions of a user.
        /// 
        /// The id of the user.
        /// Whether check the user's existence.
        /// The permission list.
        /// Thrown when  is true and user does not exist.
        Task GetPermissionsOfUserAsync(long userId, bool checkUserExistence = true);
        /// 
        /// Add a permission to user.
        /// 
        /// The id of the user.
        /// The new permission.
        /// Thrown when user does not exist.
        /// Thrown when change root user's permission.
        Task AddPermissionToUserAsync(long userId, UserPermission permission);
        /// 
        /// Remove a permission from user.
        /// 
        /// The id of the user.
        /// The permission.
        /// Whether check the user's existence.
        /// Thrown when  is true and user does not exist.
        /// Thrown when change root user's permission.
        Task RemovePermissionFromUserAsync(long userId, UserPermission permission, bool checkUserExistence = true);
    }
}