enhance: ユーザーにロールが期限付きでアサインされている場合、その期限をユーザーのモデレーションページで確認できるように
Close #11059
This commit is contained in:
		| @@ -220,14 +220,19 @@ export class RoleService implements OnApplicationShutdown { | ||||
| 	} | ||||
|  | ||||
| 	@bindThis | ||||
| 	public async getUserRoles(userId: User['id']) { | ||||
| 	public async getUserAssigns(userId: User['id']) { | ||||
| 		const now = Date.now(); | ||||
| 		let assigns = await this.roleAssignmentByUserIdCache.fetch(userId, () => this.roleAssignmentsRepository.findBy({ userId })); | ||||
| 		// 期限切れのロールを除外 | ||||
| 		assigns = assigns.filter(a => a.expiresAt == null || (a.expiresAt.getTime() > now)); | ||||
| 		const assignedRoleIds = assigns.map(x => x.roleId); | ||||
| 		return assigns; | ||||
| 	} | ||||
|  | ||||
| 	@bindThis | ||||
| 	public async getUserRoles(userId: User['id']) { | ||||
| 		const roles = await this.rolesCache.fetch(() => this.rolesRepository.findBy({})); | ||||
| 		const assignedRoles = roles.filter(r => assignedRoleIds.includes(r.id)); | ||||
| 		const assigns = await this.getUserAssigns(userId); | ||||
| 		const assignedRoles = roles.filter(r => assigns.map(x => x.roleId).includes(r.id)); | ||||
| 		const user = roles.some(r => r.target === 'conditional') ? await this.cacheService.findUserById(userId) : null; | ||||
| 		const matchedCondRoles = roles.filter(r => r.target === 'conditional' && this.evalCond(user!, r.condFormula)); | ||||
| 		return [...assignedRoles, ...matchedCondRoles]; | ||||
|   | ||||
| @@ -61,6 +61,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { | ||||
|  | ||||
| 			const signins = await this.signinsRepository.findBy({ userId: user.id }); | ||||
|  | ||||
| 			const roleAssigns = await this.roleService.getUserAssigns(user.id); | ||||
| 			const roles = await this.roleService.getUserRoles(user.id); | ||||
|  | ||||
| 			return { | ||||
| @@ -85,6 +86,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { | ||||
| 				signins, | ||||
| 				policies: await this.roleService.getUserPolicies(user.id), | ||||
| 				roles: await this.roleEntityService.packMany(roles, me), | ||||
| 				roleAssigns: roleAssigns.map(a => ({ | ||||
| 					createdAt: a.createdAt.toISOString(), | ||||
| 					expiresAt: a.expiresAt ? a.expiresAt.toISOString() : null, | ||||
| 					roleId: a.roleId, | ||||
| 				})), | ||||
| 			}; | ||||
| 		}); | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 syuilo
					syuilo