/**
  * Add a new role.
  *
  * @param  \App\Board  $board
  * @return Response
  */
 public function putAdd(Board $board)
 {
     if (!$this->user->canEditConfig($board)) {
         return abort(403);
     }
     $roles = Role::whereCanParentForBoard($board, $this->user)->get();
     $castes = $board->getRoleCastes(Input::get('roleType'))->get()->pluck('caste');
     $rules = ['roleType' => ["required", "string", "in:" . $roles->lists('role')->implode(",")], 'roleCaste' => ["string", "alpha_num", "unique:roles,role,{$board->board_uri},board_uri"], 'roleName' => ["string"], 'roleCapcode' => ["string"]];
     $validator = Validator::make(Input::all(), $rules);
     $validator->sometimes('roleCaste', "not_in:" . $castes->implode(","), function ($input) use($castes) {
         return $castes->count();
     });
     if ($validator->fails()) {
         return redirect()->back()->withInput()->withErrors($validator->errors());
     }
     $role = new Role();
     $role->board_uri = $board->board_uri;
     $role->inherit_id = $roles->where('role', strtolower(Input::get('roleType')))->pluck('role_id')[0];
     $role->role = strtolower(Input::get('roleType'));
     $role->caste = strtolower(Input::get('roleCaste'));
     $role->name = Input::get('roleName') ?: "user.role.{$role->role}";
     $role->capcode = Input::get('roleCapcode');
     $role->weight = 5 + constant(Role::class . "::WEIGHT_" . strtoupper(Input::get('roleType')));
     $role->save();
     return redirect($role->getPermissionsURLForBoard());
 }