Settings/Users

pull/451/head
Marcelo Schmidt 11 years ago
parent 1a423281e7
commit 7bd299f6da
  1. 4
      client/methods/setUserActiveStatus.coffee
  2. 45
      client/views/settings/settingsUsers.coffee
  3. 7
      client/views/settings/settingsUsers.html
  4. 4
      server/lib/accounts.coffee
  5. 11
      server/methods/deleteUser.coffee
  6. 15
      server/methods/setUserActiveStatus.coffee
  7. 8
      server/publications/fullUsers.coffee
  8. 7
      server/startup/migrations/v13.coffee

@ -0,0 +1,4 @@
Meteor.methods
setUserActiveStatus: (userId, active) ->
Meteor.users.update userId, { $set: { active: active } }
return true

@ -10,8 +10,7 @@ Template.settingsUsers.helpers
query = { $or: [ { username: filterReg }, { name: filterReg }, { "emails.address": filterReg } ] }
else
query = {}
return Meteor.users.find(query).fetch()
return Meteor.users.find(query, { limit: Template.instance().limit?.get(), sort: { username: 1 } }).fetch()
name: ->
return if @name then @name else TAPi18next.t 'project:Unnamed'
email: ->
@ -40,17 +39,14 @@ Template.settingsUsers.helpers
Template.settingsUsers.onCreated ->
instance = @
@loaded = new ReactiveVar 0
@limit = new ReactiveVar 50
@skip = new ReactiveVar 0
@filter = new ReactiveVar ''
@ready = new ReactiveVar true
@autorun ->
filter = instance.filter.get()
limit = instance.limit.get()
skip = instance.skip.get()
subscription = instance.subscribe 'fullUsers', filter, limit, skip
subscription = instance.subscribe 'fullUsers', filter, limit
instance.ready.set subscription.ready()
Template.settingsUsers.onRendered ->
@ -79,3 +75,40 @@ Template.settingsUsers.events
e.preventDefault()
Session.set 'settingsUsersSelected', $(e.currentTarget).data('id')
Session.set 'flexOpened', true
'click .deactivate': ->
Meteor.call 'setUserActiveStatus', Session.get('settingsUsersSelected'), false, (error, result) ->
if result
toastr.success t('User_has_been_deactivated')
if error
toastr.error error.reason
'click .activate': ->
Meteor.call 'setUserActiveStatus', Session.get('settingsUsersSelected'), true, (error, result) ->
if result
toastr.success t('User_has_been_activated')
if error
toastr.error error.reason
'click .delete': ->
swal {
title: t('Are_you_sure')
text: t('Delete_User_Warning')
type: 'warning'
showCancelButton: true
confirmButtonColor: '#DD6B55'
confirmButtonText: t('Yes_delete_it')
cancelButtonText: t('Cancel')
closeOnConfirm: false
html: false
}, ->
swal
title: t('Deleted')
text: t('User_has_been_deleted')
type: 'success'
timer: 2000
showConfirmButton: false
Meteor.call 'deleteUser', Session.get('settingsUsersSelected'), (error, result) ->
if error
toastr.error error.reason

@ -56,7 +56,8 @@
{{> avatar username=username}}
</div>
<div class="info">
<h3>{{username}}</h3>
<h3>{{name}}</h3>
<p><i class="icon-at"></i> {{username}}</p>
{{#if utcOffset}}<p><i class="icon-location"></i> {{utcOffset}}</p>{{/if}}
{{#each emails}} <p><i class="icon-mail"></i> {{address}}{{#if verified}}&nbsp;<i class="icon-ok"></i>{{/if}}</p> {{/each}}
{{#each phone}} <p><i class="icon-phone"></i> {{phoneNumber}}</p> {{/each}}
@ -64,7 +65,11 @@
</div>
</div>
<nav>
{{#if active}}
<button class='button deactivate'><span><i class='icon-block'></i> {{_ "Deactivate"}}</span></button>
{{else}}
<button class='button activate'><span><i class='icon-ok-circled'></i> {{_ "Activate"}}</span></button>
{{/if}}
<button class='button delete red'><span><i class='icon-trash'></i> {{_ "Delete"}}</span></button>
</nav>
{{/with}}

@ -53,6 +53,10 @@ Accounts.validateLoginAttempt (login) ->
if login.allowed isnt true
return login.allowed
if login.user?.active isnt true
throw new Meteor.Error 'inactive-user', 'Your_user_has_been_deactivated'
return false
if login.type is 'password' and RocketChat.settings.get 'Accounts_denyUnverifiedEmails' is true
validEmail = login.user.emails.filter (email) ->
return email.verified is true

@ -0,0 +1,11 @@
Meteor.methods
deleteUser: (userId) ->
if not Meteor.userId()
throw new Meteor.Error('invalid-user', "[methods] deleteUser -> Invalid user")
user = Meteor.users.findOne Meteor.userId()
unless user?.admin is true
throw new Meteor.Error 'not-authorized', '[methods] deleteUser -> Not authorized'
return true
# Meteor.users.remove userId

@ -0,0 +1,15 @@
Meteor.methods
setUserActiveStatus: (userId, active) ->
if not Meteor.userId()
throw new Meteor.Error 'invalid-user', '[methods] setUserActiveStatus -> Invalid user'
user = Meteor.users.findOne Meteor.userId()
unless user?.admin is true
throw new Meteor.Error 'not-authorized', '[methods] setUserActiveStatus -> Not authorized'
Meteor.users.update userId, { $set: { active: active } }
if active is false
Meteor.users.update userId, { $set: { "services.resume.loginTokens" : [] } }
return true

@ -1,4 +1,4 @@
Meteor.publish 'fullUsers', (filter, limit, skip) ->
Meteor.publish 'fullUsers', (filter, limit) ->
unless this.userId
return this.ready()
@ -15,7 +15,7 @@ Meteor.publish 'fullUsers', (filter, limit, skip) ->
limit = Math.min limit, 50
console.log '[publish] fullUsers'.green, filter, limit, skip
console.log '[publish] fullUsers'.green, filter, limit
Meteor.users.find query,
fields:
@ -31,6 +31,6 @@ Meteor.publish 'fullUsers', (filter, limit, skip) ->
utcOffset: 1
language: 1
lastLogin: 1
utcOffset: 1
active: 1
limit: limit
skip: skip
sort: { username: 1 }

@ -0,0 +1,7 @@
Meteor.startup ->
Migrations.add
version: 13
up: ->
# Set all current users as active
Meteor.users.update {}, { $set: { active: true } }, { multi: true }
console.log "Set all users as active"
Loading…
Cancel
Save