Skip to content

Commit 4a9036c

Browse files
Merge branch '0.3' into feature-queue-retry
2 parents f142bff + dd380c4 commit 4a9036c

File tree

10 files changed

+155
-367
lines changed

10 files changed

+155
-367
lines changed

src/Api/Controllers/AuthController.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@
2222
use Canvas\Notifications\ResetPassword;
2323
use Canvas\Notifications\Signup;
2424
use Canvas\Notifications\UpdateEmail;
25+
use Canvas\Validation;
2526
use Exception;
2627
use Phalcon\Http\Response;
28+
use Phalcon\Validation\Validator\Email;
2729

2830
class AuthController extends BaseController
2931
{
@@ -330,13 +332,14 @@ public function loginBySocial() : Response
330332

331333
$this->request->validate([
332334
'social_id' => 'required',
333-
'email' => 'required|email',
334335
'provider' => 'required',
335336
]);
336337

337338
$source = Sources::findFirstOrFail([
338339
'title = ?0 and is_deleted = 0',
339-
'bind' => [$request['provider']]
340+
'bind' => [
341+
$request['provider']
342+
]
340343
]);
341344

342345
if ($source->isApple()) {
@@ -345,6 +348,15 @@ public function loginBySocial() : Response
345348
$request['email'] = $appleUserInfo->email;
346349
}
347350

351+
$emailValidation = new Validation();
352+
$emailValidation->add(
353+
'email',
354+
new Email([
355+
'The email is required'
356+
])
357+
);
358+
$emailValidation->validate($request);
359+
348360
return $this->response(
349361
$this->providerLogin($source, $request['social_id'], $request)
350362
);

src/Api/Controllers/RolesController.php

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
use Baka\Http\Exception\ForbiddenException;
88
use Canvas\Models\Apps;
99
use Canvas\Models\Roles;
10-
use Exception;
1110
use Phalcon\Http\Response;
1211

1312
class RolesController extends BaseController
@@ -61,9 +60,38 @@ public function onConstruct()
6160
}
6261

6362
/**
64-
* Delete a Record.
63+
* Update a record.
64+
*
65+
* @param mixed $id
6566
*
66-
* @throws Exception
67+
* @return Response
68+
*/
69+
public function edit($id) : Response
70+
{
71+
$role = $this->getRecordById($id);
72+
73+
/**
74+
* Can edit ecosystem roles , only on the ecosystem admin app.
75+
*/
76+
if (
77+
!$this->userData->isAdmin()
78+
&& Apps::CANVAS_DEFAULT_APP_ID !== $this->app->getId()
79+
&& (
80+
$role->companies_id === Apps::CANVAS_DEFAULT_COMPANY_ID
81+
|| $role->apps_id === Apps::CANVAS_DEFAULT_APP_ID
82+
)
83+
) {
84+
throw new ForbiddenException('Cant Edit a Global App Role');
85+
}
86+
87+
//process the input
88+
$result = $this->processEdit($this->request, $role);
89+
90+
return $this->response($this->processOutput($result));
91+
}
92+
93+
/**
94+
* Delete a Record.
6795
*
6896
* @return Response
6997
*/

src/Api/Controllers/UsersController.php

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
use Canvas\Mapper\UserMapper;
1313
use Canvas\Models\Notifications;
1414
use Canvas\Models\Roles;
15-
use Canvas\Models\UserRoles;
1615
use Canvas\Models\Users;
1716
use Canvas\Models\UsersAssociatedApps;
1817
use Phalcon\Http\Response;
@@ -246,7 +245,11 @@ public function changeAppUserActiveStatus(int $id, int $appsId) : Response
246245
{
247246
$userAssociatedToApp = UsersAssociatedApps::findFirstOrFail([
248247
'conditions' => 'users_id = ?0 and apps_id = ?1 and companies_id = ?2 and is_deleted = 0',
249-
'bind' => [$id, $this->app->getId(), $this->userData->getDefaultCompany()->getId()]
248+
'bind' => [
249+
$id,
250+
$this->app->getId(),
251+
$this->userData->getDefaultCompany()->getId()
252+
]
250253
]);
251254

252255
$userAssociatedToApp->user_active = $userAssociatedToApp->user_active ? 0 : 1;
@@ -267,9 +270,9 @@ public function unsubscribe(int $id) : Response
267270
{
268271
$request = $this->request->getPostData();
269272

270-
if (!isset($request['notification_types'])) {
271-
throw new Exception('Error Processing Request', 1);
272-
}
273+
$this->request->validate([
274+
'notification_types' => 'required|array'
275+
]);
273276

274277
//none admin users can only edit themselves
275278
if (!$this->userData->hasRole('Default.Admins') || $id == 0) {
@@ -297,31 +300,24 @@ public function unsubscribe(int $id) : Response
297300
*/
298301
public function getUsersByRole(string $roleName) : Response
299302
{
300-
$usersArray = [];
301-
302303
if (!Roles::isRole($roleName)) {
303304
throw new NotFoundException(_('Role does not exist'));
304305
}
305306

306307
$role = Roles::getByName(ucfirst($roleName));
307308

308-
// Use table users role to get a list of all users with that role and belong to current company and app
309-
$userRoles = UserRoles::findOrFail([
310-
'conditions' => 'apps_id = :apps_id:
311-
and companies_id = :companies_id:
312-
and roles_id = :roles_id:
313-
and is_deleted = 0',
314-
'bind' => [
315-
'apps_id' => $this->app->getId(),
316-
'companies_id' => $this->userData->getCurrentCompany()->getId(),
317-
'roles_id' => $role->id
318-
]
319-
]);
309+
$this->additionalSearchFields = [
310+
['is_deleted', ':', 0],
311+
];
320312

321-
foreach ($userRoles as $userRole) {
322-
$usersArray[] = $userRole->user;
323-
}
313+
$this->customTableJoins = ' , user_roles as r';
314+
$this->customConditions = " AND users.id = r.users_id AND
315+
r.companies_id = {$this->userData->getCurrentCompany()->getId()}
316+
AND r.roles_id = {$role->getId()}
317+
AND r.is_deleted = 0
318+
AND r.apps_id = {$this->app->getId()}
319+
";
324320

325-
return $this->response($usersArray);
321+
return $this->index();
326322
}
327323
}

src/App/Setup.php

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,9 @@
1313
use Canvas\Models\Roles;
1414
use Canvas\Models\SystemModules;
1515
use Canvas\Models\Users;
16-
use Phalcon\Di;
1716
use Monolog\Handler\StreamHandler;
1817
use Monolog\Logger;
19-
18+
use Phalcon\Di;
2019

2120
class Setup
2221
{
@@ -261,8 +260,7 @@ public function acl() : self
261260
$acl = Di::getDefault()->get('acl');
262261
$acl->setApp($this->app);
263262

264-
$acl->addRole($this->app->name . '.Admins');
265-
$acl->addRole($this->app->name . '.Users');
263+
$acl->addRole($this->app->name . '.Manager');
266264

267265
$acl->addComponent(
268266
$this->app->name . '.Users',
@@ -276,7 +274,7 @@ public function acl() : self
276274
);
277275

278276
$acl->allow(
279-
'Admins',
277+
'Manager',
280278
$this->app->name . '.Users',
281279
[
282280
'read',
@@ -320,7 +318,7 @@ public function acl() : self
320318
);
321319

322320
$acl->allow(
323-
'Admins',
321+
'Manager',
324322
$resource,
325323
[
326324
'read',
@@ -333,7 +331,7 @@ public function acl() : self
333331
}
334332

335333
$acl->allow(
336-
'Admins',
334+
'Manager',
337335
$this->app->name . '.SettingsMenu',
338336
[
339337
'company-settings',

0 commit comments

Comments
 (0)