David,

I looked through your code and I'm not sure you have answered my question.

Let me try to clarify.  There is a difference between a Devise role and a 
Postgres role.  A devise role will control access to Rails functionality.  
For example, one can restrict access to a Rails controller method using 
Devise.

A Postgres role ( 
https://www.postgresql.org/docs/current/static/database-roles.html ) is a 
completely different animal. I quote and modify what is written there:

> Database roles are conceptually completely separate from operating system 
> [and Devise!] users.


I _think_ I need to do something like "sudo -i -u 
SomeOtherPostgresUserName" but I want to do it inside Rails so I can 
connect to databases as user SomeOtherPostgresUserName.


Can you share how you did the "give each RoR user the ability to write 
> their own SQL statements "? I may want to do the same.


Here is the code I use.  RalphSql.exec_sql is what you want.  
RalphSql.get_column_names_from_table is a function I find useful for other 
obvious purposes.
class RalphSql
  def self.exec_sql(sql_text)
    begin
      # Return an array of records
      return ActiveRecord::Base.connection.execute(sql_text)
    rescue Exception => e
      byebug if ralph_test_byebug
      raise e
    end
  end

  # See http://www.rubydoc.info/gems/pg/PG/Result
  def self.get_column_names_from_table(postgres_table_name)
    sql = %Q[SELECT column_name FROM information_schema.columns WHERE 
table_name = '#{postgres_table_name}';]
    # byebug if ralph_test_byebug
    pg_result = RalphSql.exec_sql(sql)  # pg_result.class == PG::Result
    ret = pg_result.values
    # byebug if ralph_test_byebug
    ret
  end


end


I use devise and cancancan for login and roles.


I use pundit



On Wednesday, July 12, 2017 at 4:51:32 AM UTC-6, David Gleba wrote:
>
>
> I use devise and cancancan for login and roles.
>
> In my little rails app generator project: 
> https://github.com/dgleba/bashrail  there are scripts for this. Even if 
> you don't use the scripts, they document exactly how to implement it in 
> that case.
>
> look at:  
> https://github.com/dgleba/bashrail/blob/master/devise1.sh
> https://github.com/dgleba/bashrail/blob/master/cancan1.sh
>
> When I am learning something like this I strip the scripts down to just 
> what is needed to create an app with the feature I am studing.
>
> I am not sure about the  "give each RoR user the ability to write their 
> own SQL statements ".
> Is that just a model/view/controller in your app? If so, the above should 
> work for that too.
>
> Can you share how you did the "give each RoR user the ability to write 
> their own SQL statements "? I may want to do the same.
>
>
>
> On Tuesday, July 11, 2017 at 11:39:13 PM UTC-4, Ralph Shnelvar wrote:
>>
>> I have a database with a large table.
>>
>> I have several users each of whom should have read-only rights to the 
>> large table but has read/wrtie rights to their own table(s) but not to each 
>> others table(s).
>>
>> Adding to the complication, I want to give each RoR user the ability to 
>> write their own SQL statements against the large table as well as their own 
>> table(s).  I have successfully implemented being able to have them enter 
>> sql statements and create results they can view and/or download.  Doing 
>> that is not my question.
>>
>> I want to make sure each of my "readonly" users can't modify any tables 
>> they are not authorized to see and/or change.
>>
>> So,I guess, I want to change Postgres roles within Rails.  Any guidance 
>> would, of course, be appreciated.
>>
>>
>>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/91a23720-7b73-4349-94aa-25d9d9da1e5b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to