views:

79

answers:

4

I'm trying to determine the best structure to approach multi level user groups. Thus far I've created one object called "User" which i assumed could potentially be broken into different levels. Or should I simply create different tables for each user group?

A: 

Have a look into Single Table Inheritance..

The short version is that you add a type(string) column to your table and subclass all other models that will use that table from User

Eg:

class SuperUser < User
  ...
end
EmFi
A: 

EmFi's Answer combined with some sort of role-based authentication would be a good solution. There is a discussion of some role schemes here: http://stackoverflow.com/questions/875595/what-are-some-good-role-authorization-solutions-used-with-authlogic

Synthlabs
A: 

I assume you are talking about differnt roles for your users. I am currently using RoleRequirement. It gets the job done fairly easily. http://code.google.com/p/rolerequirement/

kidbrax
A: 

As EmFi suggested, single table inheritance is your best bet. You would need to add the type field to the users table in the database and subclass your User model as below:

class Admin < User
  # You probably don't need any methods here.
end

but you would also need to create a before filter. Quite similar to the one which makes sure that the user is logged in, it simply checks the class of your user. This should go in your ApplicationController:

def check_admin
  current_user.is_a? Admin
end

There you go, Bob's your uncle, you have rudimentary authorisation.

To promote a user to Admin within rails, just change the type field. Of course, in this way, the user can only hold one access level (which is fine for a lot of applications). If you should want a more complex system, acl9 is quite well equipped for the job. I personally make a habit of using it along with authlogic to form quite a powerful system.

Andrew Harvey