Knowledge Platform License Support

Problem Definition

Knowledge Platform should support multiple types of License.

  • License should be passed by the Creator of the content.
  • If the license is not passed by user, default license for the tenant should be considered for the content.
  • If tenant is also not having any default license, content should be linked with system specific default license.

Problem statement

  • Each content should be linked to the license value.
  • License can have list of attributes, like, name, description and url.

Implementation Design

License should be added as object in Knowledge Platform data store

  • License can be added frequently and it will have some other metadata properties as well.
  • So the license will be added as Object in KP data store with relevant metadata properties like, name, description and url.
  • Using license name, we will generate identifier, so the name will be unique.
  • License can be created, updated, read and retire.
  • Once license Created, updated or retired - license cache will be reset with the list of license name.
  • License cache will be utilised in content-license validation and channel-defaultLicense validation.
  • Since license name can not be updated, we need not to do any content license value migration during license update.
  • While retiring license - license cache will be updated and (NEED DISCUSSION: content tagged with the license can be updated with default license value).

Channel will have default license value

  • As part of channel create and update API, default license can be added as metadata.
  • defaultLicense is not mandatory field.
  • if defaultLicense is coming in channel create or update request, it will be validated against the list of license list coming from the cache
  • If license cache is not available - fetch list of live license, validated default license and set license cache.

Content will be tagged with license as text

  • License validation will be handled in Graph engine layer by using trait.
  • In content schema, license will be of type String.
  • In config.json, we will have licenseValidation as true.
  • LicenseValidator (trait) will have validation implementation which will execute license specific validation (if licenseValidation is true).
  • Content Create (KP 2.0)
    • if license is part of request - it will get validated from the list of license coming in the cache (if cache is not available - fetch list of license, validate license and set cache).
    • if license is not part of request - channel's defaultLicense will be passed as license value (channel object will be coming from cache - if cache is not available - fetch channel from data store, set defaultLicense and set channel cache).
    • if channel also have no defaultLicense - system configured default license value will be passed as license value.
  • Update API (KP 2.0)
    • if license is part of request - it will get validated from the list of license coming in the cache (if cache is not available - fetch list of license, validate license and set cache).
    • if license is not part of request and content does not have license - channel's defaultLicense will be passed as license value (channel object will be coming from cache - if cache is not available - fetch channel from data store, set defaultLicense and set channel cache).
    • if channel also have no defaultLicense - system configured default license value will be passed as license value.
    • if the content is copied content (having origin field) - license can not be updated.
    • if the content id copied content (having origin field) - origin can not be updated (This is additional implementation)
  • Content Upload API
    • only for youtube content - license value will be updated with youtube specific license.
  • Content Copy API (KP 1.0)
    • copied content will be having same license value of origin content.
    • if request contains license value, we will throw client exception.