Hi team,
While using Frappe Helpdesk, I’ve created tickets and assigned them to a user. However, I am unable to restrict the user from accessing unassigned tickets. I have tried using user permissions , it doesn’t seem to work. Could there be something I’m missing? Please help me resolving this matter.
I have implemented some quick hacks to enable this feature.
1 . I have created a new “HD Preset Filter” by setting the condition to the field ‘_assign’ as ‘@me ’.
2 . Then, I created a user permission document for the user who needs to be restricted from unassigned tickets.
3 . I have overridden the function ‘get_preset_filters’ (path: helpdesk/helpdesk/api/general.py at main · frappe/helpdesk · GitHub ) by adding a new condition: if user permission exists for the user.
Please refer the below code:
@frappe.whitelist()
def get_preset_filters(doctype):
"""
Args:
doctype (_type_): _description_
Returns:
Dict {"user": [], "global": []}: Returns the preset filters for a given doctype
"""
options = {"user": [], "global": []}
data = []
user_permissions = frappe.get_all(
"User Permission",
filters={"allow":"HD Preset Filter" , "user": frappe.session.user},
fields=["name", "for_value"],
)
if user_permissions:
for doc_name in user_permissions:
data.append((doc_name.for_value ,))
preset_filters = list(data)
else:
fd_preset_filter = frappe.qb.DocType("HD Preset Filter")
preset_filters = list(
(
frappe.qb.from_(fd_preset_filter)
.select(fd_preset_filter.name)
.where(
(
(
(fd_preset_filter.type == "User")
& (fd_preset_filter.user == frappe.session.user)
)
| (fd_preset_filter.type.isin(["Global", "System"]))
)
& (fd_preset_filter.reference_doctype == doctype)
)
.orderby(fd_preset_filter.type)
.orderby(fd_preset_filter.modified, order=Order.desc)
).run()
)
for preset_filter in preset_filters:
preset_filter_doc = frappe.get_doc("HD Preset Filter", preset_filter[0])
options[
"global" if preset_filter_doc.type in ["Global", "System"] else "user"
].append(preset_filter_doc)
return options
4 . After implementing this code, the user will only see assigned tickets in the helpdesk view.
Related to this topic. is there any option at least to restrict viewing ticket by other team?
kittiu
June 24, 2024, 10:16am
5
May be you can use Permission Query for more dynamic user permission.
It is a type of server script.
So user permission right now doesn’t work on portal view. You can track the progress here: User permission not working in customer portal · Issue #1398 · frappe/helpdesk · GitHub
Changing each user permission will be handful can i do it for a specific role like agent