fix: 🔒 restrict sites data for user client role

This commit is contained in:
Alexis Gousseau 2026-05-21 12:21:11 +02:00
parent f00f67ae49
commit 6f299846e4
No known key found for this signature in database
GPG key ID: 7F3C786EE12DBB72
2 changed files with 33 additions and 6 deletions

View file

@ -62,9 +62,16 @@ class SiteController extends BackendController
*/
public function index(Request $request): \Inertia\Response
{
/** @var \App\Models\User $userModel */
$userModel = auth('backend')->user();
/** @var \Illuminate\Database\Eloquent\Builder<\App\Models\Site> $query */
$query = Site::query()->with(['projectManager', 'gitlabProject']);
;
$query = Site::query()
->when(
$userModel->role->value === UserRoleRegistry::get('client')->value,
fn($query) => $query->whereIn('id', $userModel->sites->modelKeys()),
)
->with(['projectManager', 'gitlabProject']);
if ($request->routeIs("back.$this->modelName.trash")) {
$query = $query->onlyTrashed();

View file

@ -29,8 +29,17 @@ import { AppEnv } from "@/types/global";
import { TranslationField } from "@/back/types/i18n";
import { GitlabProjectModel, SiteModel } from "@/back/types/project";
const getColumns = (viewAnyUsers: boolean, appEnv: AppEnv) => {
return [
const getColumns = (
appEnv: AppEnv,
viewAnyUsers: boolean,
enumUserRole: UserModel["role"][],
model: UserModel,
) => {
const isClient =
enumUserRole.find((role) => role.name === "client")?.value ===
model.role?.value;
const columns = [
{
accessorKey: "name",
header: str(GetTranslation("validation.custom.name")).ucFirst().value(),
@ -375,6 +384,16 @@ const getColumns = (viewAnyUsers: boolean, appEnv: AppEnv) => {
),
},
];
return columns.filter((column) => {
if (
(column.accessorKey === "users" ||
column.accessorKey === "gitlab_project") &&
isClient
)
return false;
return true;
});
};
export default function Show({
@ -384,9 +403,10 @@ export default function Show({
data: SingleResource;
modelName: string;
}) {
const { auth, appEnv } = usePage().props as unknown as {
const { auth, appEnv, enumUserRole } = usePage().props as unknown as {
auth: AuthProp;
appEnv: AppEnv;
enumUserRole: UserModel["role"][];
};
const { viewAny } = auth.policies.sites;
const { viewAny: viewAnyUsers } = auth.policies.users;
@ -402,7 +422,7 @@ export default function Show({
},
},
);
const columns = getColumns(viewAnyUsers, appEnv);
const columns = getColumns(appEnv, viewAnyUsers, enumUserRole, auth.user);
// Translations.
const transCrudBackToList = useTrans("uwil-backend::back.crud_back_to_list");