Hello Everyone!
Welcome to a new important article for all developers of which we will hide the form fields based on their permission we require.
So suppose I have a form with 10 fields and I want a few of them to be only visible 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 to 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 a view item.
- For me I have hidden the 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 preceding fields.
- But if he is one among the users in the group he will be able to see all other fields since he has special rights to see them.
Code
- <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 it is a neat job rather than working on Infopath forms and setting up the rules?
Keep learning.
Cheers.