#Arpa Authorization Gem for Ruby and Ruby on Rails projects. ## Installation Add this line to your application's Gemfile: ```ruby gem 'arpa' ``` And then execute: $ bundle Or install it yourself as: $ gem install arpa After you install Arpa and add it to your Gemfile, you need to run the generator: $ rails generate arpa:install This command will create some files that are needed to run the Gem. | File | Purpose | |----------|:-------------:| | db/migrate/20140120201010_create_arpa_tables.rb | Migration to create the all **Arpa** tables in your database (your name will include a different timestamp) | | config/locales/arpa.en.yml | Locales to use in Arpa classes | | app/assets/stylesheets/arpa/arpa_accordion.scss | Basic stylesheet to use with Arpa views | | app/controllers/arpa/resources_controller.rb app/controllers/arpa/roles_controller.rb app/controllers/arpa/profiles_controller.rb | Controllers to use the CRUD actions for each one | | app/views/arpa/resources/ app/controllers/arpa/roles/ app/controllers/arpa/profiles/ | All views to use the CRUD actions for each controller above | | config/routes.rb | Will add all routes into this file with all resources of Arpa | After generate, you need to run the migration to create all Arpa tables: $ rake db:migrate **Obs.:** The migration file will create a associate table between **Profiles** and **Users** (the Users must exist in your Application before adding the Gem) ## Usage First of all you must create the Resources, Roles and Profiles (each is avaliable in the paths listed in a section bellow). After that you need associate **Profiles** with **User** (to do this, you need create by your own the associate form view, saving some profiles in some user). Done that you can use some Helpers generated by Arpa. ### Association between Profiles and Users You just need have a method called **:profile_ids** inside the User model. This method should return a list of ids from profiles associated in the user. You just add a HBTM association in User model: ```ruby class User < ActiveRecord::Base has_and_belongs_to_many :profiles, class_name: 'Arpa::Repositories::Profiles::RepositoryProfile' end ``` With this you will be able to use the :profile_ids method. ### Controller helpers Arpa will create some helpers to use inside your controllers and views. To verify if a user has access to some :controler and :action, use the following helper: ```ruby has_access?('users', 'index') ``` To reset the session permissions created by Arpa, use the following helper: ```ruby reset_permissions ``` **Obs.:** To that helper method works. You must have **:session** (In Rails app already has) and **:current_user** attribute or method. --- If you want use that methods inside another object you should use the **Arpa::Services::Verifier** class; You just need pass as arguments the :session and :current_user: ```ruby verifier = Arpa::Services::Verifier.new(session, current_user) verifier.has_access?('users', 'index') verifier.reset_permissions ``` ### Controller Filter If you want create a filter to verify if the current_user has access and if not redirect to another route you can do this: Create a method in ApplicationController and add as a before_filter callback from rails: ```ruby class ApplicationController < ActionController::Base before_filter :authorize_user def authorize_user controller = params[:controller] action = params[:action] redirect_to some_url unless has_access?(controller, action end end ``` **Obs.:** The **has_access?** method come from Controller Helper method which Arpa gem has been created. ## Information After generate, you will be able to access some paths for each Controller created: ```ruby generate_resources_and_actions_resources GET /resources/generate_resources_and_actions(.:format) arpa/resources#generate_resources_and_actions resources GET /resources(.:format) arpa/resources#index POST /resources(.:format) arpa/resources#create new_resource GET /resources/new(.:format) arpa/resources#new edit_resource GET /resources/:id/edit(.:format) arpa/resources#edit resource GET /resources/:id(.:format) arpa/resources#show PATCH /resources/:id(.:format) arpa/resources#update PUT /resources/:id(.:format) arpa/resources#update DELETE /resources/:id(.:format) arpa/resources#destroy DELETE /roles/:id(.:format) arpa/roles#remove roles GET /roles(.:format) arpa/roles#index POST /roles(.:format) arpa/roles#create new_role GET /roles/new(.:format) arpa/roles#new edit_role GET /roles/:id/edit(.:format) arpa/roles#edit role GET /roles/:id(.:format) arpa/roles#show PATCH /roles/:id(.:format) arpa/roles#update PUT /roles/:id(.:format) arpa/roles#update DELETE /roles/:id(.:format) arpa/roles#destroy DELETE /profiles/:id(.:format) arpa/profiles#remove profiles GET /profiles(.:format) arpa/profiles#index POST /profiles(.:format) arpa/profiles#create new_profile GET /profiles/new(.:format) arpa/profiles#new edit_profile GET /profiles/:id/edit(.:format) arpa/profiles#edit profile GET /profiles/:id(.:format) arpa/profiles#show PATCH /profiles/:id(.:format) arpa/profiles#update PUT /profiles/:id(.:format) arpa/profiles#update DELETE /profiles/:id(.:format) arpa/profiles#destroy ``` ## License MIT License. Copyright Rachid Calazans.