Company Tickets or other method of viewing another customer's tickets

I've got an installation of OTRS 2.3.4 (with ITSM 1.2.3 integrated). I've successfully integrated everything perfectly with our Active Directory structure - both agents and customers can login (only to their respective front ends) and operate correctly authenticated with AD. The one remaining issue is to get Company Tickets working, or some other method of allowing customers to view each others tickets. If I'm reading correctly, UserCustomerIDs should contain a list of multiple UserCustomerID. When the UserCustomerID for the customer is present in the UserCustomerIDs of a ticket the customer should be able to see the ticket, even when they aren't the submitter of the ticket. Am I correct? If so, unfortunately we want *every* customer to be able to see every other customers tickets in certain queues. UserCustomerIDs (and the respective entries in AD) would be a ridiculous size! Instead, I've looked at Customer Groups, which (again if I'm reading correctly) should do what we want. It's set up, queues are assigned certain groups, the customer users are defaulted into these groups, but they cannot see other customers tickets. Does anyone have any suggestions? I'm utterly stumped. Thanks Matthew Note: I've pasted Config.pm below for anyone else to take advantage of - it's taken me a while to get OTRS fully happy with AD. ### CUSTOM SETTINGS START ## OPTIONS START # Show lost password feature $Self->{LostPassword} = 1; # Show MOTD - Kernel/Output/HTML/Standard/Motd.dtl on login screen $Self->{ShowMotd} = 0; # Show customer info on Compose (Phone and Email), Zoom and Queue view) $Self->{ShowCustomerInfoCompose} = 1; $Self->{ShowCustomerInfoZoom} = 1; $Self->{ShowCustomerInfoQueue} = 0; # Show Owner Info # $Self->{PhoneViewOwnerSelection} = 1; # SendmailModule $Self->{'SendmailModule'} = 'Kernel::System::Email::SMTP'; $Self->{'SendmailModule::Host'} = 'xxxxxxxx.co.uk'; $Self->{'SendmailModule::AuthUser'} = ''; $Self->{'SendmailModule::AuthPassword'} = ''; ## OPTIIONS END ## AGENT AUTHENTICATION START # Authenticate agent with Active Directory $Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP'; $Self->{'AuthModule::LDAP::Host'} = 'xxxx.xxxxxxxx.co.uk'; $Self->{'AuthModule::LDAP::BaseDN'} = 'dc=xxxxxxxx,dc=co,dc=uk'; $Self->{'AuthModule::LDAP::UID'} = 'sAMAccountName'; # Check if the agent is in correct group $Self->{'AuthModule::LDAP::GroupDN'} = 'cn=OTRS Users,ou=Local Groups,dc=xxxxxxxx,dc=co,dc=uk'; $Self->{'AuthModule::LDAP::AccessAttr'} = 'member'; $Self->{'AuthModule::LDAP::UserAttr'} = 'DN'; # User to perform search with - required if anonymous LDAP searches aren't allowed $Self->{'AuthModule::LDAP::SearchUserDN'} = 'xxxxxxxx@xxxxxxxx.co.uk'; $Self->{'AuthModule::LDAP::SearchUserPw'} = 'xxxxxxxx'; # Die if backend can't work, e. g. can't connect to server. $Self->{'AuthModule::LDAP::Die'} = 1; # Map of fields in Active Directory to OTRS $Self->{UserSyncLDAPMap} = { # DB -> LDAP UserFirstname => 'givenName', UserLastname => 'sn', UserEmail => 'mail', }; # If Active Directory user has not logged in before, add them to the following user groups in OTRS $Self->{UserSyncLDAPGroups} = [ 'users', ]; # Database table and columns where user details are stored $Self->{DatabaseUserTable} = 'users'; $Self->{DatabaseUserTableUserID} = 'id'; $Self->{DatabaseUserTableUserPW} = 'pw'; $Self->{DatabaseUserTableUser} = 'login'; ## AGENT AUTHENTICATION END ## CUSTOMER AUTHENTICATION START # Authenticate customer with Active Directory $Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::LDAP'; $Self->{'Customer::AuthModule::LDAP::Host'} = 'xxxx.xxxxxxxx.co.uk'; $Self->{'Customer::AuthModule::LDAP::BaseDN'} = 'dc=xxxxxxxx, dc=co, dc=uk'; $Self->{'Customer::AuthModule::LDAP::UID'} = 'sAMAccountName'; # User to perform search with - required if anonymous LDAP searches aren't allowed $Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'xxxxxxxx@xxxxxxxx.co.uk'; $Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'xxxxxxxx'; ## CUSTOMER AUTHENTICATION END ## CUSTOMER DETAILS START # Get customer information from Active Directory $Self->{CustomerUser} = { Name => 'Active Directory', Module => 'Kernel::System::CustomerUser::LDAP', Params => { Host => 'xxxx.xxxxxxxx.co.uk', BaseDN => 'dc=xxxxxxxx, dc=co, dc=uk', SSCOPE => 'sub', AlwaysFilter => '(mail=*)', UserDN => 'xxxxxxxx@xxxxxxxx.co.uk', UserPw => 'xxxxxxxx', }, CustomerKey => 'sAMAccountName', CustomerID => 'mail', CustomerUserListFields => ['cn', 'mail'], CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'], CustomerUserPostMasterSearchFields => ['mail'], CustomerUserNameFields => ['givenname', 'sn'], # Hide customers tickets in CompanyTickets view CustomerUserExcludePrimaryCustomerID => 1, # Is admin allowed to change customer preferences AdminSetPreferences => 0, Map => [ # note: Login, Email and CustomerID needed! # var, frontend, storage, shown, required, storage-type [ 'UserSalutation', 'Title', 'title', 1, 0, 'var' ], [ 'UserFirstname', 'Firstname', 'givenname', 1, 1, 'var' ], [ 'UserLastname', 'Lastname', 'sn', 1, 1, 'var' ], [ 'UserLogin', 'Login', 'sAMAccountName', 1, 1, 'var' ], [ 'UserEmail', 'Email', 'mail', 1, 1, 'var' ], [ 'UserCustomerID', 'CustomerID', 'mail', 0, 1, 'var' ], [ 'UserPhone', 'Phone', 'telephonenumber', 1, 0, 'var' ], [ 'UserAddress', 'Address', 'postaladdress', 1, 0, 'var' ], [ 'UserComment', 'Comment', 'description', 1, 0, 'var' ], ], }; ## CUSTOMER DETAILS END ### CUSTOM SETTINGS END

The best way to accomplish this, and correct me if I am wrong, is with roles. Roles allow for OTRS to grant access based upon the roll. For example, you could have the role of supervisor where they can see the the tickets for all of the user (customer or agent) that they supervise. Below is a link to the section of the documentation that covers Roles: http://doc.otrs.org/2.3/en/html/x813.html#adminarea-roles Jeremy Adams PC Support Specialist I Cedar Valley College 972.860.8086
Matthew Coulson
03/30/09 7:23 AM >>> I've got an installation of OTRS 2.3.4 (with ITSM 1.2.3 integrated). I've successfully integrated everything perfectly with our Active Directory structure - both agents and customers can login (only to their respective front ends) and operate correctly authenticated with AD.
The one remaining issue is to get Company Tickets working, or some other method of allowing customers to view each others tickets. If I'm reading correctly, UserCustomerIDs should contain a list of multiple UserCustomerID. When the UserCustomerID for the customer is present in the UserCustomerIDs of a ticket the customer should be able to see the ticket, even when they aren't the submitter of the ticket. Am I correct? If so, unfortunately we want *every* customer to be able to see every other customers tickets in certain queues. UserCustomerIDs (and the respective entries in AD) would be a ridiculous size! Instead, I've looked at Customer Groups, which (again if I'm reading correctly) should do what we want. It's set up, queues are assigned certain groups, the customer users are defaulted into these groups, but they cannot see other customers tickets. Does anyone have any suggestions? I'm utterly stumped. Thanks Matthew Note: I've pasted Config.pm below for anyone else to take advantage of - it's taken me a while to get OTRS fully happy with AD. ### CUSTOM SETTINGS START ## OPTIONS START # Show lost password feature $Self->{LostPassword} = 1; # Show MOTD - Kernel/Output/HTML/Standard/Motd.dtl on login screen $Self->{ShowMotd} = 0; # Show customer info on Compose (Phone and Email), Zoom and Queue view) $Self->{ShowCustomerInfoCompose} = 1; $Self->{ShowCustomerInfoZoom} = 1; $Self->{ShowCustomerInfoQueue} = 0; # Show Owner Info # $Self->{PhoneViewOwnerSelection} = 1; # SendmailModule $Self->{'SendmailModule'} = 'Kernel::System::Email::SMTP'; $Self->{'SendmailModule::Host'} = 'xxxxxxxx.co.uk'; $Self->{'SendmailModule::AuthUser'} = ''; $Self->{'SendmailModule::AuthPassword'} = ''; ## OPTIIONS END ## AGENT AUTHENTICATION START # Authenticate agent with Active Directory $Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP'; $Self->{'AuthModule::LDAP::Host'} = 'xxxx.xxxxxxxx.co.uk'; $Self->{'AuthModule::LDAP::BaseDN'} = 'dc=xxxxxxxx,dc=co,dc=uk'; $Self->{'AuthModule::LDAP::UID'} = 'sAMAccountName'; # Check if the agent is in correct group $Self->{'AuthModule::LDAP::GroupDN'} = 'cn=OTRS Users,ou=Local Groups,dc=xxxxxxxx,dc=co,dc=uk'; $Self->{'AuthModule::LDAP::AccessAttr'} = 'member'; $Self->{'AuthModule::LDAP::UserAttr'} = 'DN'; # User to perform search with - required if anonymous LDAP searches aren't allowed $Self->{'AuthModule::LDAP::SearchUserDN'} = 'xxxxxxxx@xxxxxxxx.co.uk'; $Self->{'AuthModule::LDAP::SearchUserPw'} = 'xxxxxxxx'; # Die if backend can't work, e. g. can't connect to server. $Self->{'AuthModule::LDAP::Die'} = 1; # Map of fields in Active Directory to OTRS $Self->{UserSyncLDAPMap} = { # DB -> LDAP UserFirstname => 'givenName', UserLastname => 'sn', UserEmail => 'mail', }; # If Active Directory user has not logged in before, add them to the following user groups in OTRS $Self->{UserSyncLDAPGroups} = [ 'users', ]; # Database table and columns where user details are stored $Self->{DatabaseUserTable} = 'users'; $Self->{DatabaseUserTableUserID} = 'id'; $Self->{DatabaseUserTableUserPW} = 'pw'; $Self->{DatabaseUserTableUser} = 'login'; ## AGENT AUTHENTICATION END ## CUSTOMER AUTHENTICATION START # Authenticate customer with Active Directory $Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::LDAP'; $Self->{'Customer::AuthModule::LDAP::Host'} = 'xxxx.xxxxxxxx.co.uk'; $Self->{'Customer::AuthModule::LDAP::BaseDN'} = 'dc=xxxxxxxx, dc=co, dc=uk'; $Self->{'Customer::AuthModule::LDAP::UID'} = 'sAMAccountName'; # User to perform search with - required if anonymous LDAP searches aren't allowed $Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'xxxxxxxx@xxxxxxxx.co.uk'; $Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'xxxxxxxx'; ## CUSTOMER AUTHENTICATION END ## CUSTOMER DETAILS START # Get customer information from Active Directory $Self->{CustomerUser} = { Name => 'Active Directory', Module => 'Kernel::System::CustomerUser::LDAP', Params => { Host => 'xxxx.xxxxxxxx.co.uk', BaseDN => 'dc=xxxxxxxx, dc=co, dc=uk', SSCOPE => 'sub', AlwaysFilter => '(mail=*)', UserDN => 'xxxxxxxx@xxxxxxxx.co.uk', UserPw => 'xxxxxxxx', }, CustomerKey => 'sAMAccountName', CustomerID => 'mail', CustomerUserListFields => ['cn', 'mail'], CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'], CustomerUserPostMasterSearchFields => ['mail'], CustomerUserNameFields => ['givenname', 'sn'], # Hide customers tickets in CompanyTickets view CustomerUserExcludePrimaryCustomerID => 1, # Is admin allowed to change customer preferences AdminSetPreferences => 0, Map => [ # note: Login, Email and CustomerID needed! # var, frontend, storage, shown, required, storage-type [ 'UserSalutation', 'Title', 'title', 1, 0, 'var' ], [ 'UserFirstname', 'Firstname', 'givenname', 1, 1, 'var' ], [ 'UserLastname', 'Lastname', 'sn', 1, 1, 'var' ], [ 'UserLogin', 'Login', 'sAMAccountName', 1, 1, 'var' ], [ 'UserEmail', 'Email', 'mail', 1, 1, 'var' ], [ 'UserCustomerID', 'CustomerID', 'mail', 0, 1, 'var' ], [ 'UserPhone', 'Phone', 'telephonenumber', 1, 0, 'var' ], [ 'UserAddress', 'Address', 'postaladdress', 1, 0, 'var' ], [ 'UserComment', 'Comment', 'description', 1, 0, 'var' ], ], }; ## CUSTOMER DETAILS END ### CUSTOM SETTINGS END --------------------------------------------------------------------- OTRS mailing list: otrs - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/otrs To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/otrs NEW! ENTERPRISE SUBSCRIPTION - Get more information NOW! http://www.otrs.com/en/support/enterprise-subscription/

Thanks Jeremy
Unfortunately roles only cover the rights for the Agent user, not for the
Customer user.
Perhaps I should have been more clear - we need our Customer users (on the
customer.pl frontend) to be able to see each others tickets.
2009/3/30 Jeremy Adams
The best way to accomplish this, and correct me if I am wrong, is with roles. Roles allow for OTRS to grant access based upon the roll. For example, you could have the role of supervisor where they can see the the tickets for all of the user (customer or agent) that they supervise.
Below is a link to the section of the documentation that covers Roles:

Hi, we are using, at customer creation page, the attributes CustomerID and CustomerIDs. CustomerID we are filling with the same value of Username and CustomerIDs is semi-colon list of CustomerID of other customers of the same company. A collegue at the job did this “trick”. I think it also had to enable this CustomerIDs field, changing ~/Kernel/Config.pm and ~/Kernel/User.pm
From: otrs-bounces@otrs.org [mailto:otrs-bounces@otrs.org] On Behalf Of Matthew Coulson
Sent: segunda-feira, 30 de março de 2009 10:04
To: User questions and discussions about OTRS.
Subject: Re: [otrs] Company Tickets or other method of viewing anothercustomer's tickets
Thanks Jeremy
Unfortunately roles only cover the rights for the Agent user, not for the Customer user.
Perhaps I should have been more clear - we need our Customer users (on the customer.pl frontend) to be able to see each others tickets.
2009/3/30 Jeremy Adams

Maurício
Thanks, that explains that CustomerIDs does work how I thought it did. It's
no good - we have far too many customers to do this with. With only a dozen
or so I can understand this being an effective solution, but it's
unmanageable and unwieldy for the amount we need to be dealing with.
2009/3/30 Maurício Ramos
Hi, we are using, at customer creation page, the attributes CustomerID and CustomerIDs. CustomerID we are filling with the same value of Username and CustomerIDs is semi-colon list of CustomerID of other customers of the same company. A collegue at the job did this “trick”. I think it also had to enable this CustomerIDs field, changing ~/Kernel/Config.pm and ~/Kernel/User.pm

Further to this, I've come up with the following map which solves the problem: Map => [ # note: Login, Email and CustomerID needed! # var, frontend, storage, shown, required, storage-type [ 'UserSalutation', 'Title', 'title', 1, 0, 'var' ], [ 'UserFirstname', 'Firstname', 'givenname', 1, 1, 'var' ], [ 'UserLastname', 'Lastname', 'sn', 1, 1, 'var' ], [ 'UserLogin', 'Login', 'sAMAccountName', 1, 1, 'var' ], [ 'UserEmail', 'Email', 'mail', 1, 1, 'var' ], [ 'UserCustomerID', 'CustomerID', 'company', 0, 1, 'var' ], [ 'UserCustomerIDs', 'CustomerIDs', 'company', 1, 0, 'var' ], [ 'UserPhone', 'Phone', 'telephonenumber', 1, 0, 'var' ], [ 'UserAddress', 'Address', 'postaladdress', 1, 0, 'var' ], [ 'UserComment', 'Comment', 'description', 1, 0, 'var' ], ], I simply map CustomerID and CustomerIDs to a field that always matches in our AD backend. Company Tickets and My Tickets views now work as they should, with the exception that you cannot use CustomerUserExcludePrimaryCustomerID to hide My Tickets from appearing in Company Tickets too.
participants (3)
-
Jeremy Adams
-
Matthew Coulson
-
Maurício Ramos