RAD Security Client
Non-blocking RAD Security client for Node.js.
This is a 100% JavaScript library, with TypeScript definition, with the Promise API.
This module makes it simple to implement a Node.js application that uses RAD Security for its authentication and authorization needs.
Table of Contents
Installing
$ npm install @tshio/security-client
or
yarn add @tshio/security-client
Loading and configuration module
// CommonJS
const { getSecurityClient } = require('@tshio/security-client');
// ES Module
import { getSecurityClient } from '@tshio/security-client';
const options = {
host: "localhost",
port: 50050,
https: true, // default http protocol
}
const securityClient = getSecurityClient(options);
Getting started
Login and authorization
const SecurityClient = require('@tshio/security-client');
(async () => {
const securityClient = SecurityClient.getSecurityClient();
const token = await securityClient.auth.login({ username: "superadmin", password: "superadmin" });
console.log(token);
// => { accessToken: "xxx", refreshToken: "xxx" }
})();
Examples
(async () => {
const securityClient = SecurityClient.getSecurityClient();
const token = await securityClient.auth.login({ username: "superadmin", password: "superadmin" });
// Add User
const newUser = {
username: "superadmin2",
password: "superadmin",
attributes: ["ROLE_SUPERADMIN"],
}
const { newUserId } = await securityClient.users.addUser(newUser, { accessToken: token });
console.log(newUserId);
// => 45287eff-cdb0-4cd4-8a0f-a07d1a11b382
// Add Attribute
const newUserAttribute = {
userId: newUserId,
attributes: ["ATTR1", "ATTR2"],
}
await securityClient.users.addAttributes(newUserAttribute, { accessToken: token })
const user = await securityClient.users.getUser({ userId: newUserId }, { accessToken: token });
console.log(user);
// =>
// {
// id: '78204778-de24-4957-83d5-e01235d1d52a',
// username: 'superadmin2',
// isActive: true,
// activationToken: null,
// createdAt: '2020-09-16T11:25:44.509Z',
// updatedAt: '2020-09-16T11:25:44.509Z',
// attributes: [ 'ROLE_SUPERADMIN', 'ATTR1', 'ATTR2' ],
// isSuperAdmin: true
// }
// Get Users with query filter
const users = await securityClient.users.getUsers({
filter: {
username: {
include: "superadmin2",
},
},
}, {
accessToken: token
});
console.log(users);
// =>
// {
// users: [
// {
// id: 'c44ed13d-09cc-4797-8835-18e98b5f3e07',
// username: 'superadmin2',
// isActive: true,
// activationToken: null,
// createdAt: '2020-09-16T13:16:25.997Z',
// updatedAt: '2020-09-16T13:16:25.997Z',
// attributes: [Array],
// isSuperAdmin: true
// }
// ],
// total: 1,
// page: 1,
// limit: 25
// }
// Delete user
await securityClient.users.deleteUser({ userId: newUserId }, { accessToken: token });
// Get policies
const policy = await securityClient.policy.getPolicies({ limit: 100 }, { accessToken: token });
console.log(policy);
// Add policy
const newPolicy = {
resource: "TEST",
attribute: "TEST",
}
const { id } = await securityClient.policy.addPolicy(newPolicy, { accessToken: token });
// Get policies with query filter
const result2 = await securityClient.policy.getPolicies({
filter: {
id: {
eq: id,
},
}
}, {
accessToken: token
});
console.log(result2);
// =>
// {
// policies: [
// {
// id: '7d9b054a-0c41-4517-8818-baa8af70cc12',
// attribute: 'TEST',
// resource: 'TEST'
// }
// ],
// total: 1,
// page: 1,
// limit: 25
// }
// Remove policy
await securityClient.policy.removePolicy({ id }, { accessToken: token });
})();
Add user and attributes
const { getSecurityClient } = require('@tshio/security-client');
(async () => {
const securityClient = getSecurityClient();
const token = await securityClient.auth.login({ username: "superadmin", password: "superadmin" });
const newUser = {
username: "superadmin2",
password: "superadmin",
attributes: ["ROLE_SUPERADMIN"],
}
const { newUserId } = await securityClient.users.addUser(newUser, { accessToken: token });
console.log(newUserId);
// => 45287eff-cdb0-4cd4-8a0f-a07d1a11b382
const newUserAttribute = {
userId: newUserId,
attributes: ["ATTR1", "ATTR2"],
}
await securityClient.users.addAttributes(newUserAttribute, { accessToken: token })
const user = await securityClient.users.getUser({ userId: newUserId }, { accessToken: token });
console.log(user);
// =>
await securityClient.users.deleteUser({ userId: newUserId }, { accessToken: token });
})();
Add user
const { getSecurityClient } = require('@tshio/security-client');
(async () => {
const securityClient = getSecurityClient();
const token = await securityClient.auth.login({ username: "superadmin", password: "superadmin" });
const user = {
username: "superadmin2",
password: "superadmin",
attributes: ["ROLE_SUPERADMIN"],
}
const { newUserId } = await security.users.addUser(user, { accessToken: token });
console.log(newUserId);
// => 45287eff-cdb0-4cd4-8a0f-a07d1a11b382
})();
Authorization API
async securityClient.auth.login({ username, password })
Login to rad-security
Returns a Token object or throw HttpError
Parameters
Request
Name | Type | Description |
---|---|---|
username | string |
User name |
password | string |
User password |
Example
const token = await securityClient.auth.login({ username: "superadmin", password: "superadmin" });
console.log(token);
// => { accessToken: "...", refreshToken: "..." }
async securityClient.auth.googleLogin({ code, redirectUrl })
Login to rad-security with Google OAuth provider
Returns a Token object or throw HttpError
Parameters
Request
Name | Type | Description |
---|---|---|
code | string |
Google authorization code for access tokens |
redirectUrl | string |
redirect URL (configured in Google account) |
Example
const token = await securityClient.auth.login({ username: "superadmin", password: "superadmin" });
console.log(token);
// => { accessToken: "...", refreshToken: "..." }
async securityClient.auth.facebookLogin({ code, redirectUrl })
Login to rad-security with Facebook OAuth provider
Returns a Token object or throw HttpError
Parameters
Request
Name | Type | Description |
---|---|---|
code | string |
Facebook authorization code for access tokens |
redirectUrl | string |
redirect URL (configured in Facebook account) |
Example
const token = await securityClient.auth.login({ username: "superadmin", password: "superadmin" });
console.log(token);
// => { accessToken: "...", refreshToken: "..." }
async securityClient.auth.resetPassword({resetPasswordToken, newPassword?})
Reset password
Returns a new password or throw HttpError
Parameters
Name | Type | Description |
---|---|---|
resetPasswordToken | string |
Reset password token |
newPassword | string |
optional New password |
The newPassword
is optional. If undefined
, the password will be generated randomly
.
const token = await securityClient.auth.resetPassword({
resetPasswordToken: "reset password token...",
newPassword: "NewSuperSecret",
});
async securityClient.auth.refreshToken({ asccessToken, refreshToken })
Refreshes access token.
Returns a new Token object or throw HttpError
Parameters
Name | Type | Description |
---|---|---|
accessToken | string |
Access token |
refreshToken | string |
Refresh token |
async securityClient.auth.refreshUserActiveToken(userId)
Refresh user's active token if token has expired.
Returns a new Token object or throw HttpError
Parameters
Name | Type | Description |
---|---|---|
userId | string |
User ID |
Tokens API
async securityClient.tokens.createAccessKey({ accessToken })
Create Api Key
Return object
{
apiKey: string;
type: "custom";
createdBy: string;
}
or throw HttpError
Parameters
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
async securityClient.tokens.generateToken({ accessExpirationInSeconds, refreshExpirationInSeconds }, { accessToken })
Creates new token with default policies and attributes without SUPERADMIN_ROLE attribute
Return object
{
accessToken: string;
refreshToken: string;
}
or throw HttpError
Parameters
Request
Name | Type | Description |
---|---|---|
accessExpirationInSeconds | number |
Access token expiration time |
refreshExpirationInSeconds | number |
Refresh token expiration time |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
async securityClient.tokens.getAccessKeys({ page, limit }, { accessToken })
Get access keys list (if no query parameters returns first 25 keys)
Return object
{
accessKeys: {
id: string;
apiKey: string;
type: string;
createdBy: string;
createdAt: Date;
}[];
total: number;
}
or throw HttpError
Parameters
Name | Type | Description | Default |
---|---|---|---|
page | number |
optional Page number |
1 |
limit | number |
optional Number of results per page |
25 |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
async securityClient.tokens.removeAccessKey({ apiKey }, { accessToken })
Remove api key
Return void
or throw HttpError
Parameters
Name | Type | Description |
---|---|---|
apiKey | string |
ApiKey that should be deleted |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
token | object |
Access token object |
token.accessToken | string |
Access token |
Users API
async securityClient.users.me({ accessToken, apiKey })
Return logged in profile object
Returns an object
{
id: string,
username: string,
email: string,
isActive: boolean,
attributes: string[],
resources: string[]
}
or throw HttpError
options
Name | Type | Description |
---|---|---|
accessToken | string |
Access token |
Example
const result = await securityClient.auth.me({
accessToken
});
console.log(result);
// => { userId: "45287eff-cdb0-4cd4-8a0f-a07d1a11b382", username: "example", email: "example@example.com", isActive: true, atrributes: [], resources: [] }
async securityClient.users.getUsers({ page?, limit?, filter?, order?}, { accessToken })
Get users list (if no query parameters returns first 25 users)
Parameters
Name | Type | Description | Default |
---|---|---|---|
page | number |
optional Page number |
1 |
limit | number |
optional Number of results per page |
25 |
filter | object |
optional | {} |
order | object |
optional | {} |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
filter[column] = operator
export type GetUserColumns = "id" | "username" | "isActive" | "createdAt" | "updatedAt" | "attribute.name";
export type FilterOperators =
| "eq"
| "eqOr"
| "neq"
| "neqOr"
| "lt"
| "ltOr"
| "gt"
| "gtOr"
| "gte"
| "gteOr"
| "include"
| "includeOr";
Example
const users = await securityClient.users.getUsers({}, { accessToken });
console.log(users);
// => { users: [...], total: 1, page: 1, limit: 25, }
const users = await securityClient.users.getUsers({
page: 1,
limit: 10,
}, { accessToken });
console.log(users);
// => { users: [...], total: 1, page: 1, limit: 10, }
const users = await securityClient.users.getUsers({
page: 1,
limit: 10,
filter: {
username: {
include: "super",
}
},
order: {
by: "username",
type: "asc",
},
}, {
accessToken
});
console.log(users);
// => { users: [{username: "superadmin", ...}, ...], total: 1, page: 1, limit: 10, }
async securityClient.users.activateUser({ activationToken }, { accessToken })
Activate a new user
Returns an object
{
userId: string,
isActive: boolean
}
or throw HttpError
Parameters
Name | Type | Description |
---|---|---|
activationToken | string |
Activation token |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
Example
const result = await securityClient.auth.activateUser({
activationToken: "activation token..."
}, {
accessToken
});
console.log(result);
// => { userId: "45287eff-cdb0-4cd4-8a0f-a07d1a11b382", isActive: true }
async securityClient.users.deactivateUser({ userId }, { accessToken })
Deactivate a user
Returns an object
{
userId: string;
isActive: boolean;
deactivationDate: Date;
}
or throw HttpError
Parameters
Name | Type | Description |
---|---|---|
userId | string |
User ID |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
Example
const result = await securityClient.auth.deactivateUser({
userId: "45287eff-cdb0-4cd4-8a0f-a07d1a11b382"
}, {
accessToken
});
console.log(result);
// => { userId: "45287eff-cdb0-4cd4-8a0f-a07d1a11b382", isActive: false, deactivationDate: Date Tue Sep 15 2020 14:03:25 GMT+0200 (Central European Summer Time)}
async securityClient.users.isAuthenticated({ accessToken })
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
Am I logged?
Returns { isAuthenticated: boolean }
or throw HttpError
Example
const { isAuthenticated } = await securityClient.users.isAuthenticated({
accessToken
});
console.log(isAuthenticated);
// => true
async securityClient.users.hasAttributes({ attributes }, { accessToken })
Check if the user has provided attributes
Returns an object
{
hasAllAttributes: boolean;
}
or throw HttpError
Parameters
Name | Type | Description |
---|---|---|
attributes | string[] |
Array of attributes name |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
Example
const { hasAllAttributes } = await securityClient.users.hasAttributes({ attributes: ["ADMIN_PANEL"] }, { accessToken });
console.log(result);
// => true
async securityClient.users.hasAccess({ resources }, { accessToken })
Check if the user has access to provided resources
Returns an object
{
hasAccess: boolean; // true if the user has access to all of the resources
forbidden: string[]; // list of forbidden resources
}
or throw HttpError
Parameters
Name | Type | Description |
---|---|---|
resources | string[] |
Array of resources name |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
Example
const result = await securityClient.users.hasAccess({ resources: ["api/users"] }, { accessToken });
console.log(result);
// => { hasAccess: true, forbidden: [] }
async securityClient.users.addAttributes({ userId, attributes }, { accessToken })
Add attributes to the user
Returns an empty object or throw HttpError
Parameters
Name | Type | Description |
---|---|---|
user ID | string |
User ID |
attributes | string[] |
An array of attributes for add to the user with userID |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
await securityClient.users.addAttributes({
userId: "45287eff-cdb0-4cd4-8a0f-a07d1a11b382",
attributes: ["ATTR_1", "ATTR_2"]
}, {
accessToken
});
async securityClient.users.removeAttributes({ userId, attributes }, { accessToken })
Remove attributes from the user
Returns an empty object or throw HttpError
Parameters
Name | Type | Description |
---|---|---|
user ID | string |
User ID |
attributes | string[] |
An array of attributes to remove from the user with userID |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
Example
await securityClient.users.removeAttributes({
userId: "45287eff-cdb0-4cd4-8a0f-a07d1a11b382",
attributes: ["ATTR_1", "ATTR_2"]
}, {
accessToken
});
async securityClient.users.addUser({ username, password, attributes? }, { accessToken })
Create a new user
Returns an object
{
newUserId: string;
}
throw HttpError
Parameters
Name | Type | Description |
---|---|---|
username | string |
New user username |
password | string |
New user password |
attributes | string[] |
optional An array of user attributes |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
Example
const { newUserId } = await securityClient.users.addUser({
username: "new-user",
password: "password",
attributes: ["ADMIN_PANEL"],
}, {
accessToken
});
console.log(newUserId);
// => "45287eff-cdb0-4cd4-8a0f-a07d1a11b382"
async securityClient.users.deleteUser({ userId }, { accessToken })
Delete user
Returns an empty object or throw HttpError
userId
Type: string
User ID
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
Example
await securityClient.users.getUser({
userId: "45287eff-cdb0-4cd4-8a0f-a07d1a11b382",
}, { accessToken });
async securityClient.users.getUser({ userId }, { accessToken })
Get user
Returns an user object
User {
id: string;
username: string;
isActive: boolean;
isSuperAdmin: boolean;
attributes: string[];
createdAt: Date;
updatedAt: Date;
}
or throw HttpError
Parameters
Name | Type | Description |
---|---|---|
user ID | string |
User ID |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
Example
const result = await securityClient.users.getUser({
userId: "45287eff-cdb0-4cd4-8a0f-a07d1a11b382",
}, {
accessToken
});
async securityClient.users.getUserId({ username }, { accessToken })
Get user id
Returns an object
{
userId: string;
}
or throw HttpError
Parameters
Name | Type | Description |
---|---|---|
username | string |
User name |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
Example
const { userId } = await securityClient.users.getUserId({
username: "superadmin",
}, { accessToken });
console.log(userId)
// => "45287eff-cdb0-4cd4-8a0f-a07d1a11b382"
async securityClient.users.getUserByResources({ resource, page?, limit? }, { accessToken })
Get users by resource name
Returns an object
{
users: User[];
total: number;
page: number;
limit: number;
}
or throw HttpError
Parameters
Name | Type | Description | Default | Range |
---|---|---|---|---|
resource | string |
Resource name | ||
page | number |
optional Page number |
1 | 1 - MaxInteger |
limit | number |
optional Number of results per page |
25 | 1 - 1000 |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
Example
const result = await securityClient.getUserByResources.getUserId({
resource: "RES1",
}, { accessToken });
console.log(result)
// => { users: [...], total: 5, page: 1, limit: 25 }
async securityClient.users.setPassword({ username, oldPassword, newPassword }, { accessToken })
Set a new password for user
Returns an object
{
passwordChanged: boolean;
}
or throw HttpError
Parameters
Name | Type | Description |
---|---|---|
username | string |
User name |
oldPassword | string |
Old user password |
newPassword | string |
New user password |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
Example
const { passwordChanged } = await securityClient.getUserByResources.setPassword({
username: "superadmin",
oldPassword: "superadmin",
newPassword: "My new password"
}, {
accessToken
});
console.log(passwordChanged)
// => true
async securityClient.users.passwordResetToken({ username }, { accessToken })
Returns token which will be used to reset the user password
Returns an object
{
resetPasswordToken: string;
}
or throw HttpError
Parameters
Name | Type | Description |
---|---|---|
username | string |
User name |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
Example
const { resetPasswordToken } = await securityClient.passwordResetToken.setPassword({
username: "superadmin"
}, { accessToken });
console.log(resetPasswordToken)
// => "45287eff-cdb0-4cd4-8a0f-a07d1a11b382"
Attributes API
async securityClient.attributes.getAttributes({ page?, limit?, filter?, order? }, { accessToken })
Return attributes list (if no queryFilter parameters returns first 25 attributes)
{
attributes: Attribute[];
total: number;
page: number;
limit: number;
}
Attribute {
id: string;
name: string;
userId: string;
username: string;
}
or throw HttpError
Parameters
Name | Type | Description | Default |
---|---|---|---|
page | number |
optional Page number |
1 |
limit | number |
optional Number of results per page |
25 |
filter | object |
optional | {} |
order | object |
optional | {} |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
filter[column] = operator
export type GetAttributesColumns = "id" | "name" | "user.id" | "user.username";
export type GetAttributesFilterOperators = "eq" | "eqOr" | "neq" | "lt" | "gt" | "include" | "includeOr";
Example
const attributes = await securityClient.attributes.getAttributes({}, { accessToken });
console.log(attributes);
// => { attributes: [{id: "45287eff-cdb0-4cd4-8a0f-a07d1a11b382", name: "ROLE_SUPERADMIN", userId: "21637dee-3d21-4cd4-aa0f-117d1a11b123", username: "superadmin}], total: 1, page: 1, limit: 25, }
const attributes = await securityClient.attributes.getAttributes({
page: 1,
limit: 10,
}, { accessToken });
console.log(attributes);
// => { attributes: [{id: "45287eff-cdb0-4cd4-8a0f-a07d1a11b382", name: "ROLE_SUPERADMIN", userId: "21637dee-3d21-4cd4-aa0f-117d1a11b123", username: "superadmin}], total: 1, page: 1, limit: 10, }
const attributes = await securityClient.attributes.getAttributes({
page: 1,
limit: 10,
filter: {
name: {
eq: "ROLE_SUPERADMIN",
}
},
order: {
by: "name",
type: "asc",
},
}, { accessToken });
console.log(users);
// => { users: [{username: "superadmin", ...}, ...], total: 1, page: 1, limit: 10, }
Policy API
async securityClient.policy.addPolicy({ resource, attribute }, { accessToken })
Adds a new policy
Return object with policy id
{
id: string;
}
or throw HttpError
Parameters
Name | Type | Description |
---|---|---|
resource | string |
Policy resource |
attribute | string |
Policy attribute |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
Example
const { id } = await securityClient.policy.addPolicy({ resource: "NEW_RESOURCE", attribute: "ATTR_1"}, { accessToken });
console.log(id);
// => "45287eff-cdb0-4cd4-8a0f-a07d1a11b382"
async securityClient.policy.getPolicies({ page?, limit?, filter?, order? }, { accessToken })
Get policies list (if no query parameters returns first 25 policies)
Return object
{
policies: PolicyItem[];
total: number;
page: number;
limit: number;
}
PolicyItem {
id: string;
resource: string;
attribute: string;
}
or throw HttpError
Parameters
Name | Type | Description | Default |
---|---|---|---|
page | number |
optional Page number |
1 |
limit | number |
optional Number of results per page |
25 |
filter | object |
optional | {} |
order | object |
optional | {} |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
filter[column] = operator
export type GetPoliciesColumns = "id" | "resource" | "attribute";
export type GetPoliciesFilterOperators = "eq" | "neq" | "lt" | "gt" | "include" | "includeOr";
Example
const policies = await securityClient.policy.getPolicies({}, { accessToken });
console.log(policies);
// => { attributes: [{id: "45287eff-cdb0-4cd4-8a0f-a07d1a11b382", resource: "api/users", attribute: "ADMIN_PANEL"}], total: 1, page: 1, limit: 25 }
const policies = await securityClient.policy.getPolicies({
page: 1,
limit: 10,
}, { accessToken });
console.log(policies);
// => { attributes: [{id: "45287eff-cdb0-4cd4-8a0f-a07d1a11b382", resource: "api/users", attribute: "ADMIN_PANEL"}], total: 1, page: 1, limit: 10 }
const policies = await securityClient.policy.getPolicies({
page: 1,
limit: 10,
filter: {
attribute: {
eq: "ROLE_SUPERADMIN",
}
},
order: {
by: "resource",
type: "asc",
},
}, { accessToken });
console.log(policies);
// => { attributes: [{id: "45287eff-cdb0-4cd4-8a0f-a07d1a11b382", resource: "api/users", attribute: "ADMIN_PANEL"}], total: 1, page: 1, limit: 10 }
async securityClient.policy.removePolicy({ id }, { accessToken })
Removes a policy by id
Return an empty object or throw HttpError
Parameters
Name | Type | Description |
---|---|---|
id | string |
Policy ID |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
Example
await securityClient.policy.removePolicy({ id: "45287eff-cdb0-4cd4-8a0f-a07d1a11b382"}, { accessToken });
async securityClient.policy.removePolicy({ resource, attribute }, { accessToken })
Removes a policy by id
Return an empty object or throw HttpError
Parameters
Name | Type | Description |
---|---|---|
resource | string |
Policy resource |
attribute | string |
Policy attribute |
Options
Name | Type | Description |
---|---|---|
apiKey | string |
Api key |
accessToken | string |
Access token |
Example
await securityClient.policy.removePolicy({ resource: "RESOURCE", attribute: "ATTR_1"}, { accessToken });
Understanding filters and ordering
Filters can be used search for a single condition or they can be wrapped in logical operands AND and OR. Filtering can be a simple conditional evaluation of a single field. The operator, column
, and operator
used in a filter are specific to the API they are used in.
//
interface UsersQueryFilter {
page?: number;
limit?: number;
filter?: {
[column in Columns]: {
[operator in Operators]: string;
};
};
order?: {
by: GetUserColumns;
type: "asc" | "desc";
};
}
-
filter[column][operator] = value
Name Type Description column string
Column name, depending on the api method. See getUsers getAttributes getPolicies operator string
Operator name, depending on the api method. See getUsers getAttributes getPolicies value string
ornumber
orboolean
(depending on thecolumn
type)Single parameter filter
filter: { username: { include: "super" } }
Two parameter filter
filter: { username: { include: "super" }, isActive: { eq: true, }, }
-
order
Name Type Description Default by string
optional column name for order sorting, depending on the api method. See getUsers getAttributes getPolicies
id
type asc
ordesc
optional Ascending or descending order
asc
order: { by: "username", type: "desc" }
getUsers filter and order
column = "id" | "username" | "isActive" | "createdAt" | "updatedAt" | "attribute.name"
operator = "eq"| "eqOr" | "neq" | "neqOr" | "lt" | "ltOr" | "gt" | "gtOr" | "gte" | "gteOr" | "include" | "includeOr"
getAttributes filter and order
column = "id" | "name" | "user.id" | "user.username"`
operator = "eq" | "eqOr" | "neq" | "lt" | "gt" | "include" | "includeOr"
getPolicies filter and order
column = "id" | "resource" | "attribute"
operator = "eq" | "neq" | "lt" | "gt" | "include" | "includeOr"
License
This project is licensed under the terms of the MIT license.