/**
  * handle group creation logic
  *
  * @param Validator $validator
  * @param Dispatcher $dispatcher
  * @param Group $group
  * @return CommandResult
  */
 public function handle(Validator $validator, Dispatcher $dispatcher, Group $group)
 {
     // check user permission
     if (!$this->disablePermissionChecking) {
         if (!$this->user->hasAnyPermission(['user.manage'])) {
             return new CommandResult(false, CommandResult::$responseForbiddenMessage, null, 403);
         }
     }
     // validate data
     $validationResult = $validator->make(array('name' => $this->name, 'permissions' => $this->permissions), Group::$rules);
     if ($validationResult->fails()) {
         return new CommandResult(false, $validationResult->getMessageBag()->first(), null, 400);
     }
     // prepare data to be store
     $groupToBeCreated = array('name' => $this->name, 'permissions' => $this->transform($this->permissions));
     // fire creating
     $dispatcher->fire('group.creating', array($groupToBeCreated));
     // create
     $createdGroup = $group->create($groupToBeCreated);
     if (!$createdGroup) {
         return new CommandResult(false, "Failed to create user.", null, 400);
     }
     // fire created user
     $dispatcher->fire('group.created', array($createdGroup));
     // return response
     return new CommandResult(true, "Group successfully created.", $createdGroup, 201);
 }
 protected function createGroups()
 {
     // create dummy groups
     $blogger = Group::create(array('name' => 'blogger', 'permissions' => array('blog.list' => 1, 'blog.create' => 1, 'blog.edit' => 1, 'blog.delete' => -1)));
     $artist = Group::create(array('name' => 'artist', 'permissions' => array('blog.list' => -1, 'art.create' => 1, 'art.edit' => 1, 'art.delete' => -1)));
     $moderator = Group::create(array('name' => 'moderator', 'permissions' => array('blog.list' => -1, 'art.create' => 1, 'art.edit' => 1, 'art.delete' => -1)));
 }
 protected function createDummyUserAndGroup()
 {
     $blogger = Group::create(array('name' => 'blogger', 'permissions' => array('blog.list' => -1, 'art.create' => 1, 'art.edit' => 1, 'art.delete' => -1)));
     $user = User::create(array('first_name' => 'jane', 'last_name' => 'stark', 'email' => '*****@*****.**', 'password' => 'pass$jane', 'permissions' => array('blog.create' => 0, 'forum.create' => 0)));
     $user->groups()->attach($blogger);
     return array('blogger' => $blogger, 'user' => $user);
 }
 public function testShouldUpdate()
 {
     // create user and logged in (the user who will perform the action)
     $user = User::create(array('first_name' => 'darryl', 'email' => '*****@*****.**', 'password' => 'pass$darryl', 'permissions' => array('superuser' => 1)));
     $this->application['auth']->loginUsingId($user->id);
     // create the group that we will be updating
     $blogger = Group::create(array('name' => 'blogger', 'permissions' => array('blog.list' => 1, 'blog.create' => 1, 'blog.edit' => 1, 'blog.delete' => -1)));
     // dummy request
     // we will update the blogger group that it will not be able to create a blog now
     $request = Request::create('', 'POST', array('id' => $blogger->id, 'name' => 'blogger-renamed', 'permissions' => array('blog.list' => 1, 'blog.create' => -1, 'blog.edit' => 1, 'blog.delete' => -1)));
     // begin
     $result = $this->commandDispatcher->dispatchFromArray('Darryldecode\\Backend\\Components\\User\\Commands\\UpdateGroupCommand', array('id' => $request->get('id', null), 'name' => $request->get('name', null), 'permissions' => $request->get('permissions', array())));
     $this->assertTrue($result->isSuccessful(), 'Transaction should be successful.');
     $this->assertEquals(200, $result->getStatusCode(), 'Status code should be 200.');
     $this->assertEquals('Group successfully updated.', $result->getMessage());
     // now prove it has been updated
     $updatedGroup = Group::find($result->getData()->id);
     //$this->assertEquals('blogger-renamed', $updatedGroup->name);
     $this->assertArrayHasKey('blog.list', $updatedGroup->getPermissionsAttribute(), 'Group permissions should have key blog.list');
     $this->assertArrayHasKey('blog.create', $updatedGroup->getPermissionsAttribute(), 'Group permissions should have key blog.create');
     $this->assertArrayHasKey('blog.edit', $updatedGroup->getPermissionsAttribute(), 'Group permissions should have key blog.edit');
     $this->assertArrayHasKey('blog.delete', $updatedGroup->getPermissionsAttribute(), 'Group permissions should have key blog.delete');
     $this->assertEquals(1, $updatedGroup->getPermissionsAttribute()['blog.list'], 'Permission blog.list should be allow');
     $this->assertEquals(-1, $updatedGroup->getPermissionsAttribute()['blog.create'], 'Permission blog.create should be deny');
     $this->assertEquals(1, $updatedGroup->getPermissionsAttribute()['blog.edit'], 'Permission blog.edit should be allow');
     $this->assertEquals(-1, $updatedGroup->getPermissionsAttribute()['blog.delete'], 'Permission blog.delete should be deny');
 }
 protected function createUserAndLoggedIn()
 {
     $group = Group::create(array('name' => 'blogger', 'permissions' => array('superuser' => 1)));
     $user = User::create(array('first_name' => 'darryl', 'email' => '*****@*****.**', 'password' => 'pass$darryl', 'permissions' => array('blog.create' => 0, 'forum.create' => 0)));
     $user->groups()->attach($group);
     $this->application['auth']->loginUsingId($user->id);
     return $user;
 }
 /**
  * handle user deletion logic
  *
  * @param User $user
  * @param Group $group
  * @param Dispatcher $dispatcher
  * @return CommandResult
  */
 public function handle(User $user, Group $group, Dispatcher $dispatcher)
 {
     // check user permission
     if (!$this->disablePermissionChecking) {
         if (!$this->user->hasAnyPermission(['user.delete'])) {
             return new CommandResult(false, CommandResult::$responseForbiddenMessage, null, 403);
         }
     }
     // find the group
     if (!($groupToBeDelete = $group->with('users')->find($this->id))) {
         return new CommandResult(false, "Group not found.", null, 404);
     }
     // fire deleting
     $dispatcher->fire('group.deleting', array($this->args));
     // begin deletion
     $groupToBeDelete->users()->detach();
     $groupToBeDelete->delete();
     // fire deleted
     $dispatcher->fire('group.deleted', array($groupToBeDelete));
     // all good
     return new CommandResult(true, "Group successfully deleted.", null, 200);
 }
 /**
  * handle group command update logic
  *
  * @param Group $group
  * @param Dispatcher $dispatcher
  * @param Validator $validator
  * @return CommandResult
  */
 public function handle(Group $group, Dispatcher $dispatcher, Validator $validator)
 {
     // check user permission
     if (!$this->disablePermissionChecking) {
         if (!$this->user->hasAnyPermission(['user.manage'])) {
             return new CommandResult(false, CommandResult::$responseForbiddenMessage, null, 403);
         }
     }
     // fire updating
     $dispatcher->fire('group.updating', array($this->args));
     // try to find group to be updated
     if (!($groupToBeUpdated = $group->find($this->id))) {
         return new CommandResult(false, "Group not found.", null, 400);
     }
     // begin update
     $groupToBeUpdated->name = $this->name ? $this->name : $groupToBeUpdated->name;
     $groupToBeUpdated->permissions = $this->permissions ? $this->transform($this->permissions) : $groupToBeUpdated->permissions;
     $groupToBeUpdated->save();
     // fire creating
     $dispatcher->fire('group.updated', array($groupToBeUpdated));
     // all good
     return new CommandResult(true, "Group successfully updated.", $groupToBeUpdated, 200);
 }
 /**
  * @param \Darryldecode\Backend\Components\User\Models\Group $group
  * @param \Illuminate\Contracts\Events\Dispatcher $dispatcher
  * @return \Darryldecode\Backend\Base\Commands\CommandResult
  */
 public function handle(Group $group, Dispatcher $dispatcher)
 {
     // check user permission
     if (!$this->disablePermissionChecking) {
         if (!$this->user->hasAnyPermission(['user.manage'])) {
             return new CommandResult(false, CommandResult::$responseForbiddenMessage, null, 403);
         }
     }
     // fire before query event
     $dispatcher->fire('groups.beforeQuery', array($this->args));
     // begin
     $q = $group->with(array_merge(array('users'), $this->with))->ofName($this->name);
     // give paginated results if told so
     if ($this->paginate) {
         $results = $q->paginate($this->perPage);
     } else {
         $results = $q->get();
     }
     // fire after query event
     $dispatcher->fire('groups.afterQuery', array($results));
     // all good
     return new CommandResult(true, "Query groups command successful.", $results, 200);
 }
 /**
  * @param User $user
  * @param Dispatcher $dispatcher
  * @param Group $group
  * @return CommandResult
  */
 public function handle(User $user, Dispatcher $dispatcher, Group $group)
 {
     // check user permission
     if (!$this->disablePermissionChecking) {
         if (!$this->user->hasAnyPermission(['user.manage'])) {
             return new CommandResult(false, CommandResult::$responseForbiddenMessage, null, 403);
         }
     }
     // fire creating
     $dispatcher->fire('user.updating', array($this->args));
     // find the user to be updated
     if (!($userToBeUpdated = $user->find($this->id))) {
         return new CommandResult(false, "User not found.", null, 404);
     }
     // begin update
     $userToBeUpdated->first_name = $this->firstName ? $this->firstName : $userToBeUpdated->first_name;
     $userToBeUpdated->last_name = $this->lastName ? $this->lastName : $userToBeUpdated->last_name;
     $userToBeUpdated->permissions = $this->isPermissionsProvided($this->permissions) ? $this->transform($this->permissions) : $userToBeUpdated->permissions;
     if ($this->isEmailIsProvidedAndIsNew($userToBeUpdated->email, $this->email)) {
         if ($this->isEmailAlreadyInUsed($user, $this->email)) {
             return new CommandResult(false, "Email already in used.", null, 400);
         } else {
             $userToBeUpdated->email = $this->email;
         }
     }
     if ($this->isPasswordIsProvided()) {
         $userToBeUpdated->password = $this->password;
     }
     // save
     $userToBeUpdated->save();
     // add to group if there's any
     if ($this->isGroupIdsAreProvided($this->groups)) {
         // delete all groups first
         $userToBeUpdated->groups()->detach();
         // re attach
         foreach ($this->groups as $groupId) {
             $g = $group->find($groupId);
             if ($g) {
                 $userToBeUpdated->groups()->attach($g);
             }
         }
     }
     // fire created user
     $dispatcher->fire('user.updated', array($userToBeUpdated));
     // return response
     return new CommandResult(true, "User successfully updated.", $userToBeUpdated, 200);
 }
 public function testQueryWithGroupId()
 {
     // create dummy groups
     $blogger = Group::create(array('name' => 'blogger', 'permissions' => array('blog.list' => 1, 'blog.create' => 1, 'blog.edit' => 1, 'blog.delete' => -1)));
     // create user and logged in (the user who will perform the action)
     $user = User::create(array('first_name' => 'dianne', 'last_name' => 'monte', 'email' => '*****@*****.**', 'password' => 'pass$dianne', 'permissions' => array('user.manage' => 1)));
     $user->groups()->attach($blogger);
     // logged in the user
     $this->application['auth']->loginUsingId($user->id);
     $this->createUsers();
     // ----------------------
     // begin query by group
     // ----------------------
     $result = $this->commandDispatcher->dispatchFromArray('Darryldecode\\Backend\\Components\\User\\Commands\\QueryUsersCommand', array('firstName' => null, 'lastName' => null, 'email' => null, 'groupId' => $blogger->id, 'with' => array(), 'orderBy' => 'created_at', 'orderSort' => 'ASC', 'paginated' => true, 'perPage' => 15));
     $this->assertTrue($result->isSuccessful());
     $this->assertCount(1, $result->getData()->toArray()['data'], 'should only find 1 item');
     $this->assertEquals('dianne', $result->getData()->first()->first_name, 'should only find 1 item');
 }
 public function testCreateShouldCreateGroupWhenAllCheckPointsPassed()
 {
     // create user and logged in (the user who will perform the action)
     $user = User::create(array('first_name' => 'darryl', 'email' => '*****@*****.**', 'password' => 'pass$darryl', 'permissions' => array('superuser' => 1)));
     $this->application['auth']->loginUsingId($user->id);
     // dummy request
     $request = Request::create('', 'POST', array('name' => 'moderator', 'permissions' => array('forum.create' => 1, 'forum.delete' => -1)));
     // begin
     $result = $this->commandDispatcher->dispatchFrom('Darryldecode\\Backend\\Components\\User\\Commands\\CreateGroupCommand', $request);
     $this->assertTrue($result->isSuccessful(), 'Transaction should be successful.');
     $this->assertEquals(201, $result->getStatusCode(), 'Status code should be created.');
     $this->assertEquals('Group successfully created.', $result->getMessage());
     // prove persisted
     $group = Group::find($result->getData()->id);
     //$this->assertEquals('moderator',$group->name); this pass but just comment it because IDE skwaks!
     $this->assertInternalType('array', $group->permissions);
     $this->assertCount(2, $group->permissions);
     $this->assertArrayHasKey('forum.create', $group->permissions);
     $this->assertArrayHasKey('forum.delete', $group->permissions);
 }
 /**
  * @param User $user
  * @param Factory $validator
  * @param Dispatcher $dispatcher
  * @param Group $group
  * @param Repository $config
  * @return CommandResult
  */
 public function handle(User $user, Factory $validator, Dispatcher $dispatcher, Group $group, Repository $config)
 {
     // check user permission
     if (!$this->disablePermissionChecking) {
         if (!$this->user->hasAnyPermission(['user.manage'])) {
             return new CommandResult(false, CommandResult::$responseForbiddenMessage, null, 403);
         }
     }
     // prepare the user model
     $user = $this->createUserModel($user, $config);
     // validate data
     $validationResult = $validator->make(array('first_name' => $this->firstName, 'last_name' => $this->lastName, 'email' => $this->email, 'password' => $this->password), $user->getValidationRules());
     if ($validationResult->fails()) {
         return new CommandResult(false, $validationResult->getMessageBag()->first(), null, 400);
     }
     // prepare data to be store
     $userDataToBeCreated = array('first_name' => $this->firstName, 'last_name' => $this->lastName, 'email' => $this->email, 'password' => $this->password, 'permissions' => $this->transform($this->permissions));
     // fire creating
     $dispatcher->fire('user.creating', array($userDataToBeCreated));
     $createdUser = $user->create($userDataToBeCreated);
     if (!$createdUser) {
         return new CommandResult(false, "Failed to create user.", null, 400);
     }
     // add to group if there's any
     if (count($this->groups) > 0) {
         foreach ($this->groups as $groupId) {
             $g = $group->find($groupId);
             if ($g) {
                 $createdUser->groups()->attach($g);
             }
         }
     }
     // fire created user
     $dispatcher->fire('user.created', array($createdUser));
     // return response
     return new CommandResult(true, "User successfully created.", $createdUser, 201);
 }
 protected function seedUser()
 {
     $group = \Darryldecode\Backend\Components\User\Models\Group::create(array('name' => 'Super User', 'permissions' => array('superuser' => 1)));
     $user = \Darryldecode\Backend\Components\User\Models\User::create(array('first_name' => 'John', 'last_name' => 'Doe', 'email' => '*****@*****.**', 'password' => 'admin', 'permissions' => array('superuser' => 1)));
     $user->groups()->attach($group);
 }
 public function testUserInGroup()
 {
     $blogger = Group::create(array('name' => 'blogger', 'permissions' => array('blog.list' => 1, 'blog.create' => 1, 'blog.edit' => 1, 'blog.delete' => -1)));
     $artist = Group::create(array('name' => 'artist', 'permissions' => array('blog.list' => -1, 'art.create' => 1, 'art.edit' => 1, 'art.delete' => -1)));
     $user = User::create(array('first_name' => 'darryl', 'last_name' => 'Fernandez', 'email' => '*****@*****.**', 'password' => 'pass$darryl', 'permissions' => array('blog.create' => 0, 'forum.create' => 0)));
     $user->groups()->attach($blogger);
     $user->groups()->attach($artist);
     // by using the group object
     $this->assertTrue($user->inGroup($blogger));
     // by using the group name
     $this->assertTrue($user->inGroup($blogger->name));
 }
 public function testShouldAssociateTheUserToTheGroupIfThereIsAnyProvided()
 {
     // create user and logged in
     $user = User::create(array('first_name' => 'darryl', 'email' => '*****@*****.**', 'password' => 'pass$darryl', 'permissions' => array('superuser' => 1)));
     $this->application['auth']->loginUsingId($user->id);
     // create dummy groups
     $blogger = Group::create(array('name' => 'blogger', 'permissions' => array('blog.list' => 1, 'blog.create' => 1, 'blog.edit' => 1, 'blog.delete' => -1)));
     $artist = Group::create(array('name' => 'artist', 'permissions' => array('blog.list' => -1, 'art.create' => 1, 'art.edit' => 1, 'art.delete' => -1)));
     $moderator = Group::create(array('name' => 'moderator', 'permissions' => array('blog.list' => -1, 'art.create' => 1, 'art.edit' => 1, 'art.delete' => -1)));
     // dummy request, required first name
     $request = Request::create('', 'GET', array('firstName' => 'Darryl', 'lastName' => 'Fernandez', 'email' => '*****@*****.**', 'password' => 'password', 'permissions' => array(), 'groups' => array($blogger->id, $artist->id)));
     // begin
     $result = $this->commandDispatcher->dispatchFrom('Darryldecode\\Backend\\Components\\User\\Commands\\CreateUserCommand', $request);
     $createdUser = User::find($result->getData()->id);
     $this->assertTrue($createdUser->inGroup($blogger), 'User should be in blogger group');
     $this->assertTrue($createdUser->inGroup($artist), 'User should be in artist group');
     $this->assertFalse($createdUser->inGroup($moderator), 'User should not be in moderator group');
 }