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.

Reply via email to