Отключите действие CalendarEvent из углового календаря

#javascript #angular #types #angular-calendar

Вопрос:

У меня есть 2 действия ,

   actions: CalendarEventAction[] = [

    {
      label: '<i class="material-icons mat-icon">edit</i>',
      
      onClick: ({ event }: { event: CalendarEvent }): void => {
         this.editCalendarEvent(event);
    }
    }, {
      label: '<i class="material-icons mat-icon">remove</i>',
      
      onClick: ({ event }: { event: CalendarEvent }): void => {
         this.removeCalendarEvent(event);
    }
    },
]
 

Но я хочу, чтобы только пользователь с ролью (пример: администратор) видел второй значок, событие удаления.

Как я могу скрыть второй значок для остальных пользователей и отобразить его для администратора?

Спасибо

Ответ №1:

Я еще не играл с angular, поэтому я ни в коем случае не лучший человек, чтобы ответить на этот вопрос, так что, надеюсь, кто-нибудь найдет лучшее решение. Однако на данный момент вы можете просто добавить условие внутри своей onClick функции, которое проверяет, есть ли у пользователя разрешение.

 onClick: ({ event }: { event: CalendarEvent }): void => {
    if(user.admin) {
        this.removeCalendarEvent(event);
    } else {
        alert("--!!! You Don't Have Permission To Perform This Action !!!--");
    }
}
 

Вы также можете попробовать загрузить добавление onload функции в свою метку и проверить, является ли пользователь администратором, как и раньше, и если нет, вы можете установить label.disabled="true"

 ...
label: '<i onload="checkPermission()" id="removeBtn" class="material-icons mat-icon">remove</i>',
...

checkPermission() => {
    if(!user.admin) {
       document.getElementById("removeBtn").disabled = true;
    }
}

 

или просто полностью спрячьте кнопку

 ...document.getElementById("removeBtn").display = "hidden";
...
 

Вам потребуется извлечь пользовательские данные (например, роли) из вашей базы данных на серверной части. Вы могли бы использовать node.js за это. Если нет, вы более восприимчивы к тому, что люди получат права администратора с помощью консоли.