Introduction
Welcome to a new important tip for all developers where we will hide the form fields based on their permission we require.
So suppose I have a form with 10 fields and I want few of them should be visible only to certain users, so what will I do?
Let’s hit the topic.
- First, create a group and keep all users you want to have access in all fields in a form in that group.
- Other users who have access to the form but no access to those special fields can be added anywhere in the site to any permission level.
- Now in that form, add the following JavaScript code in new, edit as well as view item.
- For me, I have hidden Status, any comments, reviewed by and Response fields for general users.
- Now what I am doing is, I am calling sp services to check whether the logged in user is one among my 'Request Team' group.
- If he is not, he will not be able to view, edit or create the above fields.
- But if he is one among the users in the group, he will be able to see all other fields as he has special rights to see them.
The code is as follows:
<script type="text/javascript">
$(document).ready(function () {
$("Select[title$='Status']").closest('tr').hide();
$("textarea[title$='Any Comments']").parent('span').parent('td').parent('tr').hide();
$("Select[title$='Reviewed By']").closest('tr').hide();
$("[title$='Response']").closest('tr').hide();
$().SPServices({
operation: "GetGroupCollectionFromUser",
userLoginName: $().SPServices.SPGetCurrentUser(),
async: false,
completefunc: function (xData, Status) {
if (($(xData.responseXML).find("Group[Name='Request Team']").length == 1)) {
$("Select[title$='Status']").closest('tr').show();
$("textarea[title$='Any Comments']").parent('span').parent('td').parent('tr').show();
$("Select[title$='Reviewed By']").closest('tr').show();
$("[title$='Response']").closest('tr').show();
}
}
});
});
</script>
Don’t you think this is a neat job rather than working on Infopath forms and setting up the rules?
Keep learning.
Cheers!