first commit
This commit is contained in:
153
app/Core/Permission/AbstractRelatedPermission.php
Normal file
153
app/Core/Permission/AbstractRelatedPermission.php
Normal file
@@ -0,0 +1,153 @@
|
||||
<?php
|
||||
|
||||
namespace App\Core\Permission;
|
||||
|
||||
|
||||
|
||||
use App\Core\Service\PermissionService;
|
||||
use App\Core\Service\PermissionGroupService;
|
||||
use App\Core\Service\PermissionGroupUserMappingService;
|
||||
use App\Core\Service\UserService;
|
||||
use Exception;
|
||||
|
||||
abstract class AbstractRelatedPermission
|
||||
{
|
||||
protected $userData;
|
||||
protected $userService;
|
||||
protected $permissionGroupUserMappingService;
|
||||
|
||||
protected $permissionGroupId = [];
|
||||
protected $permissionGroupService;
|
||||
protected $permissionService;
|
||||
|
||||
public function __construct
|
||||
(
|
||||
UserService $userService,
|
||||
PermissionGroupUserMappingService $permissionGroupUserMappingService,
|
||||
PermissionGroupService $permissionGroupService,
|
||||
PermissionService $permissionService
|
||||
|
||||
)
|
||||
{
|
||||
$this->userService = $userService;
|
||||
$this->permissionGroupUserMappingService = $permissionGroupUserMappingService;
|
||||
$this->permissionGroupService = $permissionGroupService;
|
||||
$this->permissionService = $permissionService;
|
||||
}
|
||||
|
||||
protected function checkIfUserIdSet ()
|
||||
{
|
||||
if ($this->userData)
|
||||
{
|
||||
return $this->userData;
|
||||
}else
|
||||
{
|
||||
throw new Exception("You need to call 'setUser' function first");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function setUserWithPermissionId ( $userId,$propertyId,$permission_id )
|
||||
{
|
||||
$permission_id = $permission_id ? $permission_id : 0;
|
||||
return $this->setUserData ($userId,$propertyId,$permission_id );
|
||||
}
|
||||
|
||||
|
||||
private function setUserData ($userId,$propertyId,$permission_id )
|
||||
{
|
||||
$userCriteria =
|
||||
[
|
||||
"criteria"=>
|
||||
[
|
||||
["field"=>"id","condition"=>"=","value"=>$userId],
|
||||
["field"=>"status","condition"=>"=","value"=>1]
|
||||
],
|
||||
"addAppends"=>["isPropertyAdmin"],
|
||||
"firstRow"=>true
|
||||
];
|
||||
$userData = $this->userService->getUserList($userCriteria);
|
||||
if(!$userData)
|
||||
{
|
||||
throw new Exception("User Not Found");
|
||||
}
|
||||
|
||||
|
||||
$isUserRelatedActiveProperty = $this->userService->isUserRelatedActiveProperty($userId,$propertyId);
|
||||
if ( !$isUserRelatedActiveProperty)
|
||||
{
|
||||
throw new Exception("User : ".$userId." Has No Relation With Property : ".$propertyId);
|
||||
}
|
||||
|
||||
$permissionCriteria =
|
||||
[
|
||||
"criteria"=>
|
||||
[
|
||||
["field"=>"id","condition"=>"=","value"=>$permission_id]
|
||||
],
|
||||
"with"=>["permissionGroupMapping"],
|
||||
"firstRow"=>true
|
||||
];
|
||||
|
||||
$permissionData = $this->permissionService->findByCriteria($permissionCriteria);
|
||||
$permissionData = $permissionData ? $permissionData : [];
|
||||
|
||||
if ( !$permissionData && (!$userData["isSuperUser"] && !$userData["isPropertyAdmin"]))
|
||||
{
|
||||
throw new Exception("PermissionId Has Not Found : ".json_encode($permission_id));
|
||||
}
|
||||
|
||||
$permissionGroupInfo = fillOnUndefined($permissionData,"permission_group_mapping");
|
||||
|
||||
$userData["property_id"] = $isUserRelatedActiveProperty["property_id"];
|
||||
$userData["property"] = $isUserRelatedActiveProperty["property"];
|
||||
|
||||
$this->userData = $userData;
|
||||
$this->userData["relatedParameters"] = [];
|
||||
$this->userData["selectedGroupMapping"] = [];
|
||||
try
|
||||
{
|
||||
if ($this->userData[ "isSuperUser" ])
|
||||
{
|
||||
return false;
|
||||
}
|
||||
$this->userData["is_admin"] = false;
|
||||
$userRelatedParametersCriteria =
|
||||
[
|
||||
"criteria"=>
|
||||
[
|
||||
["field"=>"user_id","condition"=>"=","value"=>$userId],
|
||||
["field"=>"property_id","condition"=>"=","value"=>$propertyId],
|
||||
],
|
||||
"with"=>["permissionGroup"],
|
||||
];
|
||||
$userRelatedParams = $this->permissionGroupUserMappingService->findByCriteria($userRelatedParametersCriteria);
|
||||
$this->userData["userAllRelatedParams"] = $userRelatedParams;
|
||||
$this->userData["permission_group"] = [];
|
||||
foreach ($userRelatedParams as $perParam)
|
||||
{
|
||||
if ($perParam["permission_group"])
|
||||
{
|
||||
$this->userData["permission_group"][] = $perParam["permission_group"];
|
||||
}
|
||||
|
||||
if ($perParam["permission_group"]["is_admin"])
|
||||
{
|
||||
$this->userData["is_admin"] = true;
|
||||
$this->userData["selectedGroupMapping"] = $perParam;
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($permissionGroupInfo && $perParam["permission_group"]["id"] == $permissionGroupInfo["permission_group_id"])
|
||||
{
|
||||
$this->userData["relatedParameters"] = $perParam["relatedParametersArray"];
|
||||
$this->userData["selectedGroupMapping"] = $perParam;
|
||||
}
|
||||
}
|
||||
|
||||
} catch ( Exception $e )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
171
app/Core/Permission/RoutePermissionAuthorize.php
Normal file
171
app/Core/Permission/RoutePermissionAuthorize.php
Normal file
@@ -0,0 +1,171 @@
|
||||
<?php
|
||||
|
||||
namespace App\Core\Permission;
|
||||
|
||||
use App\Core\Service\PermissionService;
|
||||
use App\Core\Service\PermissionGroupUserMappingService;
|
||||
use App\Core\Service\UserService;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Route;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Exception;
|
||||
|
||||
class RoutePermissionAuthorize
|
||||
{
|
||||
|
||||
|
||||
private $permissionGroupUserMappingService;
|
||||
private $userService;
|
||||
private $permissionService;
|
||||
private $currentRoute;
|
||||
private $routePermissionData;
|
||||
private $request;
|
||||
|
||||
public function __construct
|
||||
(
|
||||
PermissionGroupUserMappingService $permissionGroupUserMappingService,
|
||||
UserService $userService,
|
||||
PermissionService $permissionService,
|
||||
Request $request
|
||||
)
|
||||
{
|
||||
$this->permissionGroupUserMappingService = $permissionGroupUserMappingService;
|
||||
$this->userService = $userService;
|
||||
$this->permissionService = $permissionService;
|
||||
$this->request = $request;
|
||||
$this->currentRoute = $this->request->route();
|
||||
}
|
||||
|
||||
|
||||
public function setCurrentRoute ( Route $route )
|
||||
{
|
||||
$this->currentRoute = $route;
|
||||
$this->routePermissionData = $this->getRoutePermissionData();
|
||||
}
|
||||
|
||||
protected function getRouteAliasName(){
|
||||
|
||||
$url = collect($this->request->route());
|
||||
$getNameArray = $url->where('as' , '!=', null)->first();
|
||||
return fillOnUndefined($getNameArray, 'as');
|
||||
|
||||
}
|
||||
|
||||
protected function getRoutePermissionData ()
|
||||
{
|
||||
|
||||
if ( !$this->currentRoute)
|
||||
{
|
||||
throw new Exception("Current Route is Null");
|
||||
}
|
||||
|
||||
if ($this->routePermissionData)
|
||||
{
|
||||
return $this->routePermissionData;
|
||||
}
|
||||
|
||||
$criteria =
|
||||
[
|
||||
"criteria" =>
|
||||
[
|
||||
[ "field" => "code", "condition" => "=", "value" => $this->getRouteAliasName() ]
|
||||
],
|
||||
"with" => [ "permissionGroupMapping.permissionGroup"],
|
||||
"firstRow" => 1
|
||||
];
|
||||
$result = $this->permissionService->findByCriteria ( $criteria );
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getRoutePermissionGroupId ()
|
||||
{
|
||||
return fillOnUndefined($this->getRoutePermissionData(),"permission_group_mapping.permission_group.id");
|
||||
}
|
||||
|
||||
public function isUserAuthorizedForCurrentRoute ( $params )
|
||||
{
|
||||
try
|
||||
{
|
||||
$user_id = $params['user_id'] ;
|
||||
$property_id = $params['property_id'] ;
|
||||
|
||||
$userCriteria =
|
||||
[
|
||||
"criteria"=>
|
||||
[
|
||||
["field"=>"id","condition"=>"=","value"=>$user_id],
|
||||
["field"=>"status","condition"=>"=","value"=>1]
|
||||
],
|
||||
"firstRow"=>1
|
||||
];
|
||||
|
||||
$userData = $this->userService->select($userCriteria);
|
||||
|
||||
if ( !$userData['data'] )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$userData = $userData['data'] ;
|
||||
|
||||
|
||||
if ($userData["user_type"] == 1)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
$userGroupCriteria =
|
||||
[
|
||||
"criteria" =>
|
||||
[
|
||||
["field" => "user_id", "condition" => "=", "value" => $user_id],
|
||||
["field" => "property_id", "condition" => "=", "value" => $property_id],
|
||||
["field" => "status", "condition" => "=", "value" => 1]
|
||||
],
|
||||
"with" => ["permissionGroup", "permissionGroupMapping"]
|
||||
];
|
||||
|
||||
$userGroups = $this->permissionGroupUserMappingService->findByCriteria($userGroupCriteria);
|
||||
|
||||
|
||||
if ( !$userGroups)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach ($userGroups as $perGroup)
|
||||
{
|
||||
if(isset($perGroup["permission_group"]["is_admin"]) && $perGroup["permission_group"]["is_admin"])
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ( !$routePermissionData = $this->getRoutePermissionData())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
foreach ($userGroups as $perGroup)
|
||||
{
|
||||
foreach ($perGroup["permission_group_mapping"] as $perPermissionGroup)
|
||||
{
|
||||
if($routePermissionData["id"] == $perPermissionGroup["permission_id"])
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
} catch ( Exception $e )
|
||||
{
|
||||
$message = $e->getFile()." ".$e->getLine()." ".$e->getMessage();
|
||||
Log::error($message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user