views:

58

answers:

2

Hi, I am developing an early version of my site and before I create the production version, I'd like people's opinions on whether I'm going about things the right way. The main objective is to allow users to share playlists. I have the User table (ASP.NET Membership), Playlist table and a permission table. I'd like a user to create a playlist and grant/deny access to it for a given user. My approach to this is to have the permission table contain a "pStatus" column where 0/null = deny, 1 = read. When a user requests permission to access a playlist, the creator chooses the pStatus enumeration. The column is then changed accordingly for the recipient. When accessing the recipient's profile page, a scan of the column is done to check all playlists the recipient has access to and the relevant playlists are displayed. Is this an efficient and secure way of doing things? Or is relying on one column not enough?

(nb - playlists can be considered to be similar to Facebook groups)

Thanks for any advice

+1  A: 

So Permission has foreign keys to User and Playlist. Is there any reason for the third column specifying permission level? It sounds like it should be: If a row exists in Permission, the user is allowed to access the playlist.

Otherwise, that sounds good to me.

Dark Falcon
I might be using three settings (none, read and write) so the third column would specify the setting.Thanks
keyboardP
+1  A: 

I would use some sort of bitmask in the n-m relation table I'm guessing is in between User and PlayList (i.e. a table named UserPlaylist, because 1 user can have access to more than 1 playlist and vice versa 1 playlist can be accessed by more than 1 user).

If you define the needed permission levels up front (i.e. 0 = no access, 1 = read, 2 = write, etc.), you can just add a column to the UserPlayList table, that represents the access level.

So the UserPlaylist table will have 2 foreign key columns of which the combination should be unique (i.e. define the primary key to be the 2 foreign key columns) and a column that holds the level of access in the form of a bit / integer.

Colin
My permission table is essentially the UserPlaylist table, but I had an extra PK table (incrementing int) for each record. I'll remove that column and use the combination of User and Playlist as the PK.Thanks
keyboardP