Thanks for looking at these.
class User < ActiveRecord::Base
validates_lengths_from_database
devise :database_authenticatable, :authentication_keys => [:login_name]
devise :trackable, :validatable, :lockable, :timeoutable
# Setup accessible (or protected) attributes for your model. Protected
# is being used here because solving a security problem at the model layer
seems
# wrong to me. The solution is to avoid mass-assignment from user provided
# data for anything sensitive, and for unvalidated keys.
attr_protected :encrypted_password, :password_salt
#acts_as_audited :except => [:password_encrypt, :salt]
validates :login_name, :presence => true, :uniqueness => true
validates :location, :presence => true, :if => lambda { roles.detect { | r |
r.role_name =~ /Location/ }}
validates :roles, :presence => true
validates :default_language, :presence => true
validates :password_confirmation, :presence => true, :on => :create
has_and_belongs_to_many :roles
belongs_to :location
belongs_to :default_language, :class_name => "Language"
def to_label
self.login_name
end
def has_role?(name)
self.roles.detect { | r | r.role_name == name }
end
def admin?
self.has_role? "System Modeler"
end
def programmer?
self.has_role? "Programmer"
end
def authorized_for_delete?
puts "Testing for delete security"
# anonymous users may never destroy these/this records
return false unless current_user
# unless it's an existing record and a 'permanent' flag has been thrown
return current_user.admin? || current_user.programmer?
end
def self.authorized_for_create?
puts "Testing for create security"
# anonymous users may never destroy these/this records
return false unless current_user
# unless it's an existing record and a 'permanent' flag has been thrown
return current_user.admin? || current_user.programmer?
end
def authorized_for_update?
puts "Testing for update security"
# anonymous users may never destroy these/this records
return false unless current_user
# unless it's an existing record and a 'permanent' flag has been thrown
return current_user.admin? || current_user.programmer?
end
def authorized_for_set_password?
puts "Testing for set_password security"
# anonymous users may never destroy these/this records
return false unless current_user
# unless it's an existing record and a 'permanent' flag has been thrown
return current_user.admin? || current_user.programmer?
end
end
class UsersController < SecureController
before_filter :clear_page_status
# Custom action to return the form for updating the password of a user
def edit_password
render :layout => false
end
# Modify the password for a user
def set_password
@record = User.find(params[:id])
if @record && current_user && (current_user.admin? ||
current_user.programmer?)
@record.password = params[:password]
@record.save!
flash[:notice] = 'Password Set'
else
flash[:alert] = 'Unable to set password'
end
end
# Setup the UI for the controller using ActiveScaffold config settings
active_scaffold :User do | config |
config.columns.add :password
config.columns.add :password_confirmation
infer_validations config
config.columns[:email].required = true
config.columns[:enabled].required = false
config.columns[:password_confirmation].required = true
config.list.sorting = {:login_name => :asc}
config.columns.each { | c | c.weight = 1000 }
config.columns[:login_name].weight = 100
config.columns[:email].weight = 200
config.columns[:enabled].weight = 300
config.columns[:location].weight = 500
cols = [:updated_at, :created_at, :encrypted_password, :password_salt,
:password, :password_confirmation]
config.list.columns.exclude cols.concat([:current_sign_in_ip,
:current_sign_in_at, :last_sign_in_ip, :last_sign_in_at])
config.show.columns.exclude cols
config.show.columns.add_subgroup 'Contact' do | group |
group.add :first_name
group.add :last_name
group.add :email
group.add :contact_phone
end
config.show.columns.add_subgroup 'Last Login' do | group |
group.add :last_sign_in_ip
group.add :last_sign_in_at
end
config.show.columns.add_subgroup 'Current Login' do | group |
group.add :current_sign_in_ip
group.add :current_sign_in_at
end
config.update.columns.add_subgroup 'Contact' do | group |
group.add :first_name
group.add :last_name
group.add :email
group.add :contact_phone
end
config.create.columns.add_subgroup 'Contact' do | group |
group.add :first_name
group.add :last_name
group.add :email
group.add :contact_phone
end
config.columns[:default_language].form_ui = :select
config.columns[:location].form_ui = :select
config.columns[:roles].form_ui = :select
cols = [:current_sign_in_at, :current_sign_in_ip, :failed_attempts,
:last_sign_in_ip,
:last_sign_in_at, :encrypted_password, :password_salt, :locked_at]
config.create.columns.exclude cols
config.update.columns.exclude cols
config.update.columns.exclude [:password, :password_confirmation]
config.action_links.add :password, :label => 'Password', :position =>
:after,
:type => :member, :page => false, :controller => 'users', :action =>
'edit_password'
config.columns[:default_language].clear_link
config.columns[:roles].clear_link
config.columns[:location].clear_link
end
end
On Jan 19, 2011, at 12:33 AM, vhochstein wrote:
> Hi Michael,
>
> can you please post your model and controller.
>
> --
> Volker
>
> On Jan 19, 5:06 am, Michael Latta <[email protected]> wrote:
>> I am using the rails 3 jquery fork and not seeing the actions disabled when
>> the security methods indicate they should. The operations are failing
>> because of the security methods so they are being called by the operations,
>> but not being used in controlling the actions. Currently I only have Model
>> methods, do I need controller methods in addition?
>>
>> Michael
>
> --
> You received this message because you are subscribed to the Google Groups
> "ActiveScaffold : Ruby on Rails plugin" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/activescaffold?hl=en.
>
--
You received this message because you are subscribed to the Google Groups
"ActiveScaffold : Ruby on Rails plugin" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/activescaffold?hl=en.