在Laravel中使用Sentry动态添加权限

时间:2014-04-15 08:30:31

标签: php arrays permissions laravel-4 cartalyst-sentry

我已经填充了我的权限表,以保存" pages.add"," pages.edit"等值。创建组时,我会在复选框中填充这些权限。在提交时,我遍历这些复选框的已发布值并将它们放在一个数组中。然后我以这种方式创建组:

  

public function store(){           $ validation = new CreateGroupValidator;

    if ($validation->passes()) {
        try {
            // Create the group
            $permissions = Input::get('permissions');
            $pers=array();
            foreach($permissions as $p)
            {
                $pname=Permission::find($p)->name;
                array_add($pers,$pname,'1');
            }

            $group = Sentry::createGroup(array(
                'name'        => Input::get('name'),
                'permissions' => $pers
            )); 

            return Redirect::route('admin.groups.index');
        } 
        catch (\Cartalyst\Sentry\Groups\GroupExistsException $e)
        {
            Notification::error('A group with same name already exists.');
        }
    }

    return Redirect::back()->withInput()->withErrors($validation->errors);
}

我看到数组中已经填充了值。仍然哨兵不会在群组表中加载这些权限。怎么了?建议请。

1 个答案:

答案 0 :(得分:3)

我如何使用HTML中的复选框看起来像:

<input type="checkbox" name="perms[page.edit]" value="1"> Allow
<input type="checkbox" name="perms[page.add]" value="1"> Allow

然后这是我实现我的更新功能的方式,但我的创建和更新都使用类似的代码

$input = Input::get('perms');
$c = [];
foreach ($input as $k => $p) {
    $c[$k] = $p;
}
// Find the group using the group id
$group = Sentry::findGroupById(1);
// Update the group details
$group->name = Input::get('name');
$group->permissions = $c;
// Update the group
$group->save();

希望这有帮助。