Skip to content

Instantly share code, notes, and snippets.

@belachkar
Last active May 7, 2020 17:55
Show Gist options
  • Save belachkar/91a71a75007c869312322fdc25aaf6fe to your computer and use it in GitHub Desktop.
Save belachkar/91a71a75007c869312322fdc25aaf6fe to your computer and use it in GitHub Desktop.

Auth0 Rules

Set roles to a new user

function (user, context, callback) {

  const count = context.stats && context.stats.loginsCount ?
        context.stats.loginsCount :	0;
  
  if (count > 1)
    callback(null, user, context);
  
  const ManagementClient = require('auth0@2.23.0').ManagementClient;  
  const management = new ManagementClient({
    token: auth0.accessToken,
    domain: auth0.domain
  });

  const params =  { id : user.user_id};
  const data = {"roles": ["rol_Fu2022AtihqDkvYi"]};
  management.assignRolestoUser(params, data, function (err) {
    if (err)
      callback(new Error("Can not update users with role"));
    
    callback(null, user, context);
  });    
}

Add roles and Claims (Permissons) to token

function (user, context, callback) {  
  const ManagementClient = require('auth0@2.23.0').ManagementClient;
  
  const namespace = context.request.query.redirect_uri;
  
  // Add roles to the token
  const roles = context.authorization.roles;
  context.idToken[`${namespace}/roles`] = roles || [];
  context.accessToken[`${namespace}/roles`] = roles || [];
    
  const params = {
    id: user.user_id,
    page: 0,
    per_page: 50,
    include_totals: true
  };
  const management = new ManagementClient({
    token: auth0.accessToken,
    domain: auth0.domain
  });
  
  // Get and add permissions
  management.getUserPermissions(params, function (err, permissions) {
    if (err) 
      return callback(err);
 
    const permissionsArr = permissions.permissions.map(p => p.permission_name);
    
    // Add permissons to the token
    context.idToken[`${namespace}/permissions`] = permissionsArr || [];
    context.accessToken[`${namespace}/permissions`] = permissionsArr || [];
    
    callback(null, user, context);
  });
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment