Skip to content

Commit 816bba4

Browse files
committed
make new role fetching an option
1 parent cdb95df commit 816bba4

2 files changed

Lines changed: 40 additions & 34 deletions

File tree

OpenFlow/src/Config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ export class Config {
6060
Config.client_heartbeat_timeout = parseInt(Config.getEnv("client_heartbeat_timeout", "60"));
6161

6262
Config.expected_max_roles = parseInt(Config.getEnv("expected_max_roles", "4000"));
63+
Config.decorate_roles_fetching_all_roles = Config.parseBoolean(Config.getEnv("decorate_roles_fetching_all_roles", "true"));
6364
Config.update_acl_based_on_groups = Config.parseBoolean(Config.getEnv("update_acl_based_on_groups", "false"));
6465
Config.multi_tenant = Config.parseBoolean(Config.getEnv("multi_tenant", "false"));
6566
Config.api_bypass_perm_check = Config.parseBoolean(Config.getEnv("api_bypass_perm_check", "false"));
@@ -157,6 +158,7 @@ export class Config {
157158
public static client_heartbeat_timeout: number = parseInt(Config.getEnv("client_heartbeat_timeout", "60"));
158159

159160
public static expected_max_roles: number = parseInt(Config.getEnv("expected_max_roles", "4000"));
161+
public static decorate_roles_fetching_all_roles = Config.parseBoolean(Config.getEnv("decorate_roles_fetching_all_roles", "true"));
160162
public static max_recursive_group_depth: number = parseInt(Config.getEnv("max_recursive_group_depth", "3"));
161163
public static update_acl_based_on_groups: boolean = Config.parseBoolean(Config.getEnv("update_acl_based_on_groups", "false"));
162164
public static multi_tenant: boolean = Config.parseBoolean(Config.getEnv("multi_tenant", "false"));

OpenFlow/src/DBHelper.ts

Lines changed: 38 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -66,40 +66,44 @@ export class DBHelper {
6666
return result;
6767
}
6868
public static async DecorateWithRoles(user: User): Promise<void> {
69-
const roles: Role[] = await this.GetRoles(user._id, 0);
70-
user.roles = [];
71-
roles.forEach(role => {
72-
user.roles.push(new Rolemember(role.name, role._id));
73-
});
74-
// let query: any = { _type: "role" };
75-
// const _roles: Role[] = await Config.db.query<Role>(query, null, Config.expected_max_roles, 0, null, "users", Crypt.rootToken());
76-
// if (_roles.length === 0 && user.username !== "root") {
77-
// throw new Error("System has no roles !!!!!!");
78-
// }
79-
// user.roles = [];
80-
// _roles.forEach(role => {
81-
// let isMember: number = -1;
82-
// if (role.members !== undefined) { isMember = role.members.map(function (e: Rolemember): string { return e._id; }).indexOf(user._id); }
83-
// const beenAdded: number = user.roles.map(function (e: Rolemember): string { return e._id; }).indexOf(user._id);
84-
// if (isMember > -1 && beenAdded === -1) {
85-
// user.roles.push(new Rolemember(role.name, role._id));
86-
// }
87-
// });
88-
// let foundone: boolean = true;
89-
// while (foundone) {
90-
// foundone = false;
91-
// user.roles.forEach(userrole => {
92-
// _roles.forEach(role => {
93-
// let isMember: number = -1;
94-
// if (role.members !== undefined) { isMember = role.members.map(function (e: Rolemember): string { return e._id; }).indexOf(userrole._id); }
95-
// const beenAdded: number = user.roles.map(function (e: Rolemember): string { return e._id; }).indexOf(role._id);
96-
// if (isMember > -1 && beenAdded === -1) {
97-
// user.roles.push(new Rolemember(role.name, role._id));
98-
// foundone = true;
99-
// }
100-
// });
101-
// });
102-
// }
69+
if (!Config.decorate_roles_fetching_all_roles) {
70+
const roles: Role[] = await this.GetRoles(user._id, 0);
71+
user.roles = [];
72+
roles.forEach(role => {
73+
user.roles.push(new Rolemember(role.name, role._id));
74+
});
75+
} else {
76+
let query: any = { _type: "role" };
77+
const _roles: Role[] = await Config.db.query<Role>(query, null, Config.expected_max_roles, 0, null, "users", Crypt.rootToken());
78+
if (_roles.length === 0 && user.username !== "root") {
79+
throw new Error("System has no roles !!!!!!");
80+
}
81+
user.roles = [];
82+
_roles.forEach(role => {
83+
let isMember: number = -1;
84+
if (role.members !== undefined) { isMember = role.members.map(function (e: Rolemember): string { return e._id; }).indexOf(user._id); }
85+
const beenAdded: number = user.roles.map(function (e: Rolemember): string { return e._id; }).indexOf(user._id);
86+
if (isMember > -1 && beenAdded === -1) {
87+
user.roles.push(new Rolemember(role.name, role._id));
88+
}
89+
});
90+
let foundone: boolean = true;
91+
while (foundone) {
92+
foundone = false;
93+
user.roles.forEach(userrole => {
94+
_roles.forEach(role => {
95+
let isMember: number = -1;
96+
if (role.members !== undefined) { isMember = role.members.map(function (e: Rolemember): string { return e._id; }).indexOf(userrole._id); }
97+
const beenAdded: number = user.roles.map(function (e: Rolemember): string { return e._id; }).indexOf(role._id);
98+
if (isMember > -1 && beenAdded === -1) {
99+
user.roles.push(new Rolemember(role.name, role._id));
100+
foundone = true;
101+
}
102+
});
103+
});
104+
}
105+
}
106+
103107
}
104108
public static async FindRoleByName(name: string): Promise<Role> {
105109
const items: Role[] = await Config.db.query<Role>({ name: name }, null, 1, 0, null, "users", Crypt.rootToken());

0 commit comments

Comments
 (0)