fix(rbac): hide Assign to Tenant selector in NewRoleForm for non-platform users and lock tenant_id
This commit is contained in:
@@ -44,11 +44,17 @@ function CardHeader({ title, subtitle }: { title: string; subtitle?: string }) {
|
||||
);
|
||||
}
|
||||
|
||||
import { useSelector } from "react-redux";
|
||||
import type { RootState } from "../../../store";
|
||||
|
||||
export default function NewRoleForm() {
|
||||
const navigate = useNavigate();
|
||||
const { id } = useParams<{ id: string }>();
|
||||
const isEdit = Boolean(id);
|
||||
|
||||
const user = useSelector((state: RootState) => state.auth.user);
|
||||
const isPlatformAdmin = user?.user_type === 'platform' || user?.type === 'platform';
|
||||
|
||||
const { nodes, fetchNodes, createRole, updateRole, nodesLoading, nodesError } = useRole();
|
||||
const [tenants, setTenants] = useState<Tenant[]>([]);
|
||||
const [permissions, setPermissions] = useState<Record<string, RolePermission>>({});
|
||||
@@ -85,7 +91,7 @@ export default function NewRoleForm() {
|
||||
const setValuesRef = useRef<((values: any) => void) | null>(null);
|
||||
|
||||
const formik = useFormik({
|
||||
initialValues: { role_name: "", description: "", tenant_id: "" },
|
||||
initialValues: { role_name: "", description: "", tenant_id: isPlatformAdmin ? "" : String(user?.tenant_id || user?.tenant?.id || "") },
|
||||
validationSchema: roleSchema,
|
||||
onSubmit: async (values, { setSubmitting }) => {
|
||||
const permList = Object.values(permissions).filter(
|
||||
@@ -456,21 +462,23 @@ export default function NewRoleForm() {
|
||||
<p className={errorClass}>{formik.errors.role_name}</p>
|
||||
)}
|
||||
</div>
|
||||
<div>
|
||||
<label className={labelClass}>Assign to Tenant</label>
|
||||
<select
|
||||
name="tenant_id"
|
||||
value={formik.values.tenant_id}
|
||||
onChange={formik.handleChange}
|
||||
className={inputClass()}
|
||||
>
|
||||
<option value="">No Tenant (Platform Role)</option>
|
||||
{tenants.map((t) => (
|
||||
<option key={t.id} value={t.id}>{t.tenant_name}</option>
|
||||
))}
|
||||
</select>
|
||||
<p className="mt-1 text-xs text-subtle-foreground">Leave empty for a global platform role.</p>
|
||||
</div>
|
||||
{isPlatformAdmin && (
|
||||
<div>
|
||||
<label className={labelClass}>Assign to Tenant</label>
|
||||
<select
|
||||
name="tenant_id"
|
||||
value={formik.values.tenant_id}
|
||||
onChange={formik.handleChange}
|
||||
className={inputClass()}
|
||||
>
|
||||
<option value="">No Tenant (Platform Role)</option>
|
||||
{tenants.map((t) => (
|
||||
<option key={t.id} value={t.id}>{t.tenant_name}</option>
|
||||
))}
|
||||
</select>
|
||||
<p className="mt-1 text-xs text-subtle-foreground">Leave empty for a global platform role.</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<div>
|
||||
<label className={labelClass}>Description</label>
|
||||
|
||||
Reference in New Issue
Block a user