(1)Administrative users
1)adds the admin column to the users table
$ rails generate migration add_admin_to_users admin:boolean
$ vi db/migrate/…._add_admin_to_users.rb
class AddAdminToUsers < ActiveRecord::Migration
def change
add_column :users, :admin, :boolean, default: false
end
end
2)migrate
$ bundle exec rake db:migrate
3)sample data
$ rails console
2.0.0p247 :001 > adminuser = User.create(name: "admin", email: "admin@example.com", password: "xxxxx", password_confirmation: "xxxxx",admin: true)
2.0.0p247 :002 > adminuser.admin?
=> true
(2)Rails controller
1)destroy action
$ vi app/controllers/users_controller.rb
def destroy
User.find(params[:id]).destroy
head :no_content
end
2)users have to be logged in to delete users
$ vi app/controllers/users_controller.rb
before_action :signed_in_user, only: [:index,:update,:destroy]
3)only admins can delete users
$ vi app/controllers/users_controller.rb
before_action :admin_user, only: :destroy
......
private
........
def admin_user
remember_token = User.encrypt(cookies[:remember_token])
current_user ||= User.find_by(remember_token: remember_token)
render status: :unauthorized unless current_user.admin?
end
(3)AngularJS template view
$ vi app/assets/templates/users/index.html.erb
<ul ng-repeat="user in currentitems" class="users">
<li>
<img alt="{{user.name}}" src="https://secure.gravatar.com/avatar/{{hash(user.email)}}?s=52" />
<a href="/users/{{user.id}}">{{user.name}}</a>
<a ng-show="{{ychkAdmin}}" href="" ng-click="delete(user.id)">| delete</a>
</li>
</ul>(4)AngularJS controller
$ vi app/assets/javascripts/mymodule.js.erb
myModule.controller("UsersIndexCtrl", function($scope, userResource, flashService, $location, sessionResource, $q) {
......
var deferred = $q.defer();
deferred.promise.then(function (result) {
var user_info = result;
if (user_info.user.id > 0) {
$scope.chkAdmin = user_info.user.admin;
userResource.index({}, function(response) {
$scope.users = response;
$scope.totalitems = $scope.users.length;
$scope.currentitems = $scope.users.slice(start,end);
$scope.$watch('currentpage', function() {
start = ($scope.currentpage - 1) * $scope.itemsperpage;
end = start + $scope.itemsperpage;
$scope.currentitems = $scope.users.slice(start,end);
},true);
});
} else {
$location.path("/signin");
}
},function (reason) {
console.log("qgetUser-Error");
})
qgetUser (deferred);
......
$scope.delete = function(id) {
userResource.destroy({ id: id });
userResource.index({}, function(response) {
$scope.users = response;
$scope.totalitems = $scope.users.length;
$scope.currentitems = $scope.users.slice(start,end);
});
};
});