mirror of
https://github.com/wassname/talk.git
synced 2026-06-30 05:42:10 +08:00
76 lines
2.0 KiB
JavaScript
76 lines
2.0 KiB
JavaScript
const {
|
|
decorateWithTags,
|
|
decorateWithPermissionCheck,
|
|
checkSelfField,
|
|
} = require('./util');
|
|
const KarmaService = require('../../services/karma');
|
|
const {
|
|
SEARCH_ACTIONS,
|
|
SEARCH_OTHER_USERS,
|
|
SEARCH_OTHERS_COMMENTS,
|
|
VIEW_USER_ROLE,
|
|
LIST_OWN_TOKENS,
|
|
VIEW_USER_STATUS,
|
|
VIEW_USER_EMAIL,
|
|
} = require('../../perms/constants');
|
|
const { property } = require('lodash');
|
|
|
|
const User = {
|
|
action_summaries(user, _, { loaders: { Actions } }) {
|
|
return Actions.getSummariesByItem.load(user);
|
|
},
|
|
actions({ id }, _, { loaders: { Actions } }) {
|
|
return Actions.getByID.load(id);
|
|
},
|
|
comments({ id }, { query }, { loaders: { Comments } }) {
|
|
// Set the author id on the query.
|
|
query.author_id = id;
|
|
|
|
return Comments.getByQuery(query);
|
|
},
|
|
|
|
ignoredUsers({ ignoresUsers }, args, { loaders: { Users } }) {
|
|
// Return nothing if there is nothing to query for.
|
|
if (!ignoresUsers || ignoresUsers.length <= 0) {
|
|
return [];
|
|
}
|
|
|
|
return Users.getByID.loadMany(ignoresUsers);
|
|
},
|
|
|
|
// Extract the reliability from the user metadata if they have permission.
|
|
reliable: user => KarmaService.model(user),
|
|
|
|
// The state requires the whole user object to make decisions.
|
|
state: user => user,
|
|
|
|
// Get the first email on the user.
|
|
email: property('firstEmail'),
|
|
};
|
|
|
|
// Decorate the User type resolver with a tags field.
|
|
decorateWithTags(User);
|
|
|
|
// decorate the fields on the User resolver with a permission check where the
|
|
// current user can also get their own properties.
|
|
decorateWithPermissionCheck(
|
|
User,
|
|
{
|
|
actions: [SEARCH_ACTIONS],
|
|
email: [VIEW_USER_EMAIL],
|
|
state: [VIEW_USER_STATUS],
|
|
role: [VIEW_USER_ROLE],
|
|
ignoredUsers: [SEARCH_OTHER_USERS],
|
|
tokens: [LIST_OWN_TOKENS],
|
|
profiles: [SEARCH_OTHER_USERS],
|
|
comments: [SEARCH_OTHERS_COMMENTS],
|
|
},
|
|
checkSelfField('id')
|
|
);
|
|
|
|
// Decorate the fields on the User resolver where the current user has no impact
|
|
// on the resolvability of a field.
|
|
decorateWithPermissionCheck(User, { reliable: [SEARCH_ACTIONS] });
|
|
|
|
module.exports = User;
|