Guys, I appreciate the replies but I'm not trying to assign roles to users.
Users can join projects, and users have roles per project Examples: User X belong to Project A with an Admin Role User X belong to Project B with an Guest Role User Y belong to Project B with an Observer Role Does that help clear out why I can't use a bitmask on the user's table? On Sep 14, 10:01 am, radhames brito <rbri...@gmail.com> wrote: > role model is a gem that lets you add roles to the user as a method and > saves the role into a field on the user table as a bitmask > that is , lets say you have and array like this > > ROLES = %w[admin moderator author banned] > > this gord in your user model and you have a field in the user table > called roles_mask > > as you see you can map the roles in the array as a series of bit > > [admin moderator author banned] > 0 0 0 0 > > if a user is admin the in his roles_mask field is this > > 1000 > in binary which translate to 8 in decimal format, if the user is > > admin and moderator the value is > > 1100 > > and that is a 12 > > As you can see there is no reason to have a roles table in the proyect > unless you have > like 20 or more roles. > > role model saves the roles with a virtual attribute, roles that is in > you user model and is looks like this > > def roles=(roles) > self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum > end > > as you can see it maps the array in ROLES to a binary array and saves > it in the roles_mask field of the users table > > to read a role it does this > > def roles > ROLES.reject do |r| > ((roles_mask || 0) & 2**ROLES.index(r)).zero? > end > end > > this returns an array of strings when ever it finds a 1 in the binary > representation of the string array that is saved on the > roles_mask field > > On Tue, Sep 14, 2010 at 11:47 AM, Daniel Gaytán < > > > > daniel.gaytan.n...@gmail.com> wrote: > >http://github.com/martinrehfeld/role_model > > > Enjoy! > > > Daniel Gaytán > > > 2010/9/14 nobosh <bhellm...@gmail.com> > > > Thanks for the reply. In the example above I'm not sure where the > >> Admin variable is located? Is that in the User's table as a boolean? > > >> The reason for a roles table is that there will be multiple roles > >> (Admin, Member, Viewer, Guest) etc... > > >> I tried finding the role model gem but it didn't come up in a Google > >> Search and I'm curious to learn more, do you have a URL? > > >> Thanks > > >> On Sep 14, 5:02 am, radhames brito <rbri...@gmail.com> wrote: > >> > with cancan, in your ability model > > >> > can :manage , Proyect do |proyect| > >> > proyect.user = current_user > >> > end > > >> > with this only the proyect's owner is an admin of the proyect > > >> > and i suggest you create model with the role model gem, there really is > >> no > >> > need for a role table. > > >> > On Tue, Sep 14, 2010 at 12:28 AM, nobosh <bhellm...@gmail.com> wrote: > >> > > Hello... Currently I'm using Devise & CanCan which allows me to create > >> > > Users with Roles using a (Roles_Users) table. > > >> > > That's nice, but what I want is to Have Projects in my app and for > >> > > each project for a user to possibly have a role like (Admin, Viewer, > >> > > etc) > > >> > > What kind of Model would work for this? > > >> > > Models > >> > > Users > >> > > has_many: projects > > >> > > Projects > >> > > ? > > >> > > Roles > >> > > ? > > >> > > Users_Roles_Projects (user_id, project_id, role_id) > > >> > > What do you think? I'm a newbie and could use the understanding and > >> > > thinking from you fine experienced folks. Thanks! > > >> > > -- > >> > > You received this message because you are subscribed to the Google > >> Groups > >> > > "Ruby on Rails: Talk" group. > >> > > To post to this group, send email to > >> rubyonrails-t...@googlegroups.com. > >> > > To unsubscribe from this group, send email to > >> > > rubyonrails-talk+unsubscr...@googlegroups.com<rubyonrails-talk%2Bunsubscrib > >> > > e...@googlegroups.com><rubyonrails-talk%2Bunsubscrib > >> e...@googlegroups.com> > >> > > . > >> > > For more options, visit this group at > >> > >http://groups.google.com/group/rubyonrails-talk?hl=en. > > >> -- > >> You received this message because you are subscribed to the Google Groups > >> "Ruby on Rails: Talk" group. > >> To post to this group, send email to rubyonrails-t...@googlegroups.com. > >> To unsubscribe from this group, send email to > >> rubyonrails-talk+unsubscr...@googlegroups.com<rubyonrails-talk%2Bunsubscrib > >> e...@googlegroups.com> > >> . > >> For more options, visit this group at > >>http://groups.google.com/group/rubyonrails-talk?hl=en. > > > -- > > You received this message because you are subscribed to the Google Groups > > "Ruby on Rails: Talk" group. > > To post to this group, send email to rubyonrails-t...@googlegroups.com. > > To unsubscribe from this group, send email to > > rubyonrails-talk+unsubscr...@googlegroups.com<rubyonrails-talk%2Bunsubscrib > > e...@googlegroups.com> > > . > > For more options, visit this group at > >http://groups.google.com/group/rubyonrails-talk?hl=en. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-t...@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-talk+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.