Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #-----Model
- require 'digest/sha1'
- class User < ActiveRecord::Base
- # ---------------------------------------
- # The following code has been generated by role_requirement.
- # You may wish to modify it to suit your need
- has_and_belongs_to_many :roles, :join_table => 'roles_users'
- #belongs_to :role
- attr_protected :roles
- # has_role? simply needs to return true or false whether a user has a role or not.
- # It may be a good idea to have "admin" roles return true always
- def has_role?(role_in_question)
- @_list ||= self.roles.collect(&:name)
- return true if @_list.include?("admin")
- (@_list.include?(role_in_question.to_s) )
- end
- # ---------------------------------------
- # Virtual attribute for the unencrypted password
- attr_accessor :password
- validates_presence_of :login, :email
- validates_presence_of :password, :if => :password_required?
- validates_presence_of :password_confirmation, :if => :password_required?
- validates_length_of :password, :within => 4..40, :if => :password_required?
- validates_confirmation_of :password, :if => :password_required?
- validates_length_of :login, :within => 3..40
- validates_length_of :email, :within => 3..100
- validates_uniqueness_of :login, :email, :case_sensitive => false
- before_save :encrypt_password
- # Authenticates a user by their login name and unencrypted password. Returns the user or nil.
- def self.authenticate(login, password)
- u = find_by_login(login) # need to get the salt
- u && u.authenticated?(password) ? u : nil
- end
- # Encrypts some data with the salt.
- def self.encrypt(password, salt)
- Digest::SHA1.hexdigest("--#{salt}--#{password}--")
- end
- # Encrypts the password with the user salt
- def encrypt(password)
- self.class.encrypt(password, salt)
- end
- def authenticated?(password)
- crypted_password == encrypt(password)
- end
- def remember_token?
- remember_token_expires_at && Time.now.utc < remember_token_expires_at
- end
- # These create and unset the fields required for remembering users between browser closes
- def remember_me
- self.remember_token_expires_at = 2.weeks.from_now.utc
- self.remember_token = encrypt("#{email}--#{remember_token_expires_at}")
- save(false)
- end
- def forget_me
- self.remember_token_expires_at = nil
- self.remember_token = nil
- save(false)
- end
- protected
- # before filter
- def encrypt_password
- return if password.blank?
- self.salt = Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{login}--") if new_record?
- self.crypted_password = encrypt(password)
- end
- def password_required?
- crypted_password.blank? || !password.blank?
- end
- def label
- login
- end
- end
- #------controller
- class UsersController < ApplicationController
- # Be sure to include AuthenticationSystem in Application Controller instead
- require_role "user"
- before_filter :load_user, :login_required
- def load_user
- @user=current_user
- rolearr=@user.roles
- rolearr.each do |a|
- @role=a.name
- end
- end
- # render new.rhtml
- def new
- @roles=Role.find:all
- end
- active_scaffold :user do |config|
- config.columns = [:id,:login, :email,:created_at, :roles]
- config.update.columns = [:login, :email,:password,:password_confirmation]
- end
- def create
- cookies.delete :auth_token
- # protects against session fixation attacks, wreaks havoc with
- # request forgery protection.
- # uncomment at your own risk
- # reset_session
- @user = User.new(params[:user])
- @user.save
- if @user.errors.empty
- self.current_user = @user
- redirect_back_or_default('/')
- flash[:notice] = "Thanks for signing up!"
- else
- render :action => 'new'
- end
- end
- end
Add Comment
Please, Sign In to add comment