/ / как да създадете потребителска роля мъдър контрол на достъпа в потребителската и ролята таблица присъединяване в cakephp 3? - точене, контрол на достъпа, топограф-3.х, rbac

как да създадете потребителски роля мъдър контрол на достъпа в потребителски и ролева таблица, присъединяване в cakephp 3? - cakephp, контрол на достъпа, cakephp-3.x, rbac

потребителска таблица

въведете описанието на изображението тук

таблица с роли

въведете описанието на изображението тук

Искам само да разреша контрола за достъп до таблицата с роли, като: ctrl_view = 1 означава, че тази роля може да вижда всеки изглед на контролера.

Как мога да поставя различни действия в различна роля?

Отговори:

0 за отговор № 1

последвам конвенции, user_role_id трябва да се нарича "role_id", role_id само "id" и user_name трябва да бъде "потребителско име" или във вашия Auth конфигурация променете името на полетата по подразбиране за формата на връзката си.

public function initialize()
{
//...
$this->loadComponent("Auth", [
"loginRedirect" => [
"controller" => "Pages",
"action" => "welcome",
"prefix" => "admin"
],
"logoutRedirect" => [
"controller" => "Users",
"action" => "login",
"prefix" => false
],
"authError" => "Unauthorized access...",
"authenticate" => [
"Form" => [
"fields" => ["username" => "user_name", "password" => "password"]
]
],
"authorize" => "Controller",
"unauthorizedRedirect" => [
"controller" => "Pages",
"action" => "unauthorized"
],
]);
// ...
}

и във вашия Appcontroller направите подобно нещо

 public function isAuthorized($user)
{

if(!is_null($this->Auth->user())): // if user is logged

$action = $this->request->getParam("action"); // get name action

$this->loadModel("Roles"); // load your model Roles
$query = $this->Authorizations->find() // find inside Roles
->where([
"Roles.role_id IN" => $user["user_role_id"], // where role_id is like user_role_id of current user
"Roles.ctl_".$action => 1 // and where ctl_[action] is set to 1
])->toArray();

if (!empty($query)): // if we find an occurence, we allow the action
return true;
else: // else we don"t authorize
return false,
endif;

/* previous lines can be change with this  ----> return (!empty($query)); */
else: // if user is not connected we don"t allow action
return false
endif;
}

и да завърши, мисля, че е по-добре да се използва"префикс", с префикс u може да опрости процеса на оторизация (няма префикс I позволяват, с префикс аз проверявам таблицата с ролите), за това трябва просто да добавите тези линии в началото на функцията ви еАвторизирана:

if (!$this->request->getParam("prefix")) {
return true;
}

Надявам се, че помага