2015-02-10 80 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很容易完成。委托人做的是回答“这个用户是否可以通过一个组来访问这个权限?”这个问题。这就是我所追求的。