Module: DeviseRestfulAuth::InstanceMethods
- Defined in:
- lib/devise_restful_auth/validate_auth.rb
Instance Method Summary collapse
-
#validate_permissions(item_type = nil) ⇒ Object
se item o subject sono qualsiasi, si specifica 'any' nel controller e viene settato il valore nil per la ricerca sul db se item e subject sono la stessa classe, la convenzione è di chiamare il model che mappa i ruoli come SubjectSubjectRole.
Instance Method Details
#validate_permissions(item_type = nil) ⇒ Object
se item o subject sono qualsiasi, si specifica 'any' nel controller e viene settato il valore nil per la ricerca sul db se item e subject sono la stessa classe, la convenzione è di chiamare il model che mappa i ruoli come SubjectSubjectRole. verrà usata la chiave subject_id per il soggetto indipendentemente dalla classe.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/devise_restful_auth/validate_auth.rb', line 23 def (item_type=nil) @item_type||=item_type if item_type controller= self.request.params[:controller] action= self.request.params[:action] if @item_type.nil? @item_type=controller.singularize.camelize elsif @item_type.eql?'any' @item_type=nil end #try to infer @item_id if nil (nil means any here and will be considered) if @item_id.nil? if eval(@item_type).is_a? Class begin @item=eval(@item_type).find(params[:id]) if params[:id] @item_id=@item.id unless @item.nil? rescue => e @item_id=nil end end end if @subject_type.nil? @subject_type="User" @subject_id=current_user.id if current_user elsif @subject_type.eql?'any' @subject_type=nil end if @role_id.nil? begin @permission_model=(eval("#{@subject_type}"+"#{@item_type}"+"Role").is_a? Class) rescue =>e # logger debug.e end if @subject_type and @item_type and @permission_model if @subject_type.eql?@item_type @roles=eval("#{@subject_type}"+"#{@item_type}"+"Role").all if !@roles.empty? @subject_roles=@roles.find_all { |e| [nil,@subject_id].include? e[:subject_id] } end else begin @subject_roles=eval("#{@subject_type}"+"#{@item_type}"+"Role").all(:conditions=>{"#{@subject_type.parameterize}_id".to_sym=>@subject_id}) rescue => e end end @subject_roles||=[] begin if !@subject_roles.empty? @sr=@subject_roles.find_all { |i| [nil,@item_id].include? i[:item_id] } @role_ids=@sr end rescue => e end @role_type="Role" end @role_ids||=[] end if eval("Permission").is_a? Class p=Permission.first(:conditions=>{:controller=>controller,:action=>action}) if p @role_ids.each do |user_role| @role_permissions=SubjectPermission.all(:conditions=>["subject_id=? and subject_type=? and permission_id=? and (item_type=? or item_type='')",user_role.role.id,@role_type,p.id,@item_type]) if !@role_permissions.empty? @rps=@role_permissions.find_all { |rp| [nil,@item_id].include? rp[:item_id]} end @rps||=[] @rps.each do |sp| end if !@rps.empty? return end end @subject_permissions_on_items=SubjectPermission.all(:conditions=>["(item_type=? or item_type='') and permission_id=? and subject_id=? and subject_type=?",@item_type,p.id,@subject_id,@subject_type]) if !@subject_permissions_on_items.empty? @ups=@subject_permissions_on_items.find_all { |u| [nil,@item_id].include? u[:item_id]} end if @ups return else flash[:error]="accesso negato perché non esiste un permesso né per l'utente, né per il suo ruolo, su #{controller}/#{action} per #{@item_type}:#{@item_id}" redirect_to root_url and return end else flash[:error]="accesso negato perché è presente la validazione per questa operazione (<strong>#{controller}/#{action}</strong>), ma non esistono permessi associati" redirect_to root_url and return end end end |