using System;
using System.Runtime.Serialization;
using Kreta.Framework.Localization;
using Kreta.Framework.Logging;

namespace Kreta.Framework.Security
{
    /// <summary>
    /// A jogosultságrendszer kivételeinek ősosztálya.
    /// </summary>
    [FriendlyName(1000016, "A jogosultságrendszer megsértése történt.")]
    [ErrorCode(Events.SECURITY_GENERAL)]
    [Serializable]
    public class SecurityException : FrameworkException
    {
        /// <summary>
        /// Visszaadja, hogy a jogosultság megsértése okozzon-e munkamenet megszüntetést, vagy sem.
        /// </summary>
        public virtual bool DestroyUserSession
        {
            get
            {
                return false;
            }
        }

        /// <summary>
        /// Az osztály konstruktora.
        /// </summary>
        public SecurityException() { }

        /// <summary>
        /// Az osztály konstruktora.
        /// </summary>
        /// <param name="message">A kivétel szövege</param>
        public SecurityException(string message)
            : base(message) { }

        /// <summary>
        /// Az osztály konstruktora.
        /// </summary>
        /// <param name="message">A kivétel szövege</param>
        /// <param name="innerException">Az előző kivétel</param>
        public SecurityException(string message, Exception innerException)
            : base(message, innerException) { }

        /// <summary>
        /// Az osztály konstruktora.
        /// </summary>
        /// <param name="info">Sorosítási adatok</param>
        /// <param name="context">Sorosítási adatfolyam</param>
        protected SecurityException(SerializationInfo info, StreamingContext context)
            : base(info, context) { }
    }
}