2015-02-10 78 views
1

我正在研究一個相當複雜的用戶系統,它需要能夠授予個人或整個組的訪問權限。例如,您可以授予Jane Doe訪問權限,以調節留言板或通信組的所有用戶發送電子郵件,調整留言板和發佈事件(添加時,分配給該組的所有用戶都被授予訪問這些權限的權限) 。Laravel 5雄辯ORM - 多對多通過多對多

我不是要嚴格地跟蹤每個用戶的個人權限,而是首先根據用戶是否屬於包含該權限的組來授予對某項功能的訪問權限。如果他們不這樣做,那麼我想檢查他們是否被授予個人訪問權限(privilege_user數據透視表)。

基本上,我想是這樣的:

// 1 = Message Board Moderator 
// See if any of the user's groups contain this privilege - 
$hasAccess = Auth::user()->groups->privileges->contains(1); 

這裏是我的表結構:

用戶

| Field   | Type    | Null | Key | Default    | Extra   | 
+----------------+------------------+------+-----+---------------------+----------------+ 
| id    | int(10) unsigned | NO | PRI | NULL    | auto_increment | 
| username  | varchar(80)  | NO |  | NULL    |    | 
| email   | varchar(120)  | NO |  | NULL    |    | 
| first_name  | varchar(20)  | NO | MUL | NULL    |    | 
| last_name  | varchar(45)  | NO | MUL | NULL    |    | 
| password  | varchar(140)  | NO |  | NULL    |    | 
| active   | tinyint(1)  | NO |  | NULL    |    | 
| remember_token | varchar(100)  | NO |  | NULL    |    | 
| last_login  | timestamp  | YES |  | NULL    |    | 
| last_login_ip | varchar(45)  | YES |  | NULL    |    |     
| updated_at  | timestamp  | NO |  | 0000-00-00 00:00:00 |    | 
| created_at  | timestamp  | NO |  | 0000-00-00 00:00:00 |    | 
| deleted_at  | timestamp  | YES |  | NULL    |    | 
+----------------+------------------+------+-----+---------------------+----------------+ 

(表:user_groups)

+-------------+------------------+------+-----+---------------------+----------------+ 
| Field  | Type    | Null | Key | Default    | Extra   | 
+-------------+------------------+------+-----+---------------------+----------------+ 
| id   | int(10) unsigned | NO | PRI | NULL    | auto_increment | 
| name  | varchar(255)  | NO |  | NULL    |    | 
| slug  | varchar(255)  | NO |  | NULL    |    | 
| description | text    | NO |  | NULL    |    | 
| created_at | timestamp  | NO |  | 0000-00-00 00:00:00 |    | 
| updated_at | timestamp  | NO |  | 0000-00-00 00:00:00 |    | 
+-------------+------------------+------+-----+---------------------+----------------+ 

用戶組樞軸(表:user_user_group)

+---------------+------------------+------+-----+---------+-------+ 
| Field   | Type    | Null | Key | Default | Extra | 
+---------------+------------------+------+-----+---------+-------+ 
| user_id  | int(10) unsigned | NO | MUL | NULL |  | 
| user_group_id | int(10) unsigned | NO | MUL | NULL |  | 
+---------------+------------------+------+-----+---------+-------+ 

特權(表:privleges)

+-------+------------------+------+-----+---------+----------------+ 
| Field | Type    | Null | Key | Default | Extra   | 
+-------+------------------+------+-----+---------+----------------+ 
| id | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| name | varchar(255)  | NO |  | NULL |    | 
| slug | varchar(255)  | NO |  | NULL |    | 
+-------+------------------+------+-----+---------+----------------+ 

特權用戶組樞軸(表:privilege_user_group)

+---------------+------------------+------+-----+---------+-------+ 
| Field   | Type    | Null | Key | Default | Extra | 
+---------------+------------------+------+-----+---------+-------+ 
| privilege_id | int(10) unsigned | NO | MUL | NULL |  | 
| user_group_id | int(10) unsigned | NO | MUL | NULL |  | 
+---------------+------------------+------+-----+---------+-------+ 
+0

你的問題是什麼?這是一個簡單的角色/權限系統,但我不知道你在問什麼。 – Sturm 2015-02-11 15:28:04

+0

以爲我很清楚,但這是另一種說法。用戶可以屬於多個組。一個組可以有許多權限。我需要查看某個特定用戶是否屬於具有特定權限的組,並且該組可以擁有多個權限。所以,「這個用戶是否可以通過他們的一個組訪問這個特權,如果有的話?」 – NightMICU 2015-02-11 15:32:21

回答

0

對此感到失望的是,沒有人在這裏指出,但幸運的是,我在Laracasts.com上找到了一些很好的幫助。

我去了Zizaco/entrust,這正是我所描述的。缺乏的唯一部分是回答「這個用戶是否有權限」這個問題,而用戶沒有被分配到一個組中,但用Eloquent很容易完成。委託人做的是回答「這個用戶是否可以通過一個組來訪問這個權限?」這個問題。這就是我所追求的。