For classic view, you could hide list item by CSR.
Below is sample script to hide list item if user have not edit permission for list item.
<script type="text/javascript">
(function () {
function OnPostRenderTemplate(ctx) {
SP.SOD.executeOrDelayUntilScriptLoaded(loadContext, 'sp.js');
function loadContext() {
var rows = ctx.ListData.Row;
var call = jQuery.ajax({
url: _spPageContextInfo.webAbsoluteUrl +
"/_api/Web/effectiveBasePermissions",
type: "GET",
dataType: "json",
async: false,
headers: {
Accept: "application/json;odata=verbose"
}
});
var manageLists;
call.done(function (data, textStatus, jqXHR) {
var manageListsPerms = new SP.BasePermissions();
manageListsPerms.initPropertiesFromJson(data.d.EffectiveBasePermissions);
manageLists = manageListsPerms.has(SP.PermissionKind.manageLists);
});
for (var i = 0; i < rows.length; i++) {
var row = document.getElementById(GenerateIIDForListItem(ctx, rows[i]));
if (manageLists) {
row.style.display = 'block';
} else {
row.style.display = 'none';
}
}
}
}
function RegisterListViewTemplate() {
var viewContext = {};
viewContext.Templates = {};
viewContext.Templates.OnPostRender = OnPostRenderTemplate;
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(viewContext);
}
ExecuteOrDelayUntilScriptLoaded(RegisterListViewTemplate, 'clienttemplates.js');
})();
</script>