/// <summary>
        /// Adds <see cref="Permission"/> to the <see cref="credential"/> with
        /// the specified <see cref="Privilege"/>.
        /// </summary>
        /// <param name="credential"></param>
        /// <param name="privilege"></param>
        /// <see cref="CredentialBase.AddRole(Feature,Privilege?)"/>
        protected internal virtual void AddRole(CredentialBase credential, Privilege?privilege = null)
        {
            privilege = privilege ?? Inherited;

            //Will assume that the Credential Roles already contains him.
            var p = Permissions.SingleOrDefault(r => r.Feature.Equals(this) && r.Credential.Equals(credential));

            if (p != null)
            {
                //Touch the privilege on the way out.
                p.Privilege = privilege;
                return;
            }

            InternalPermissions.Add(new Permission
            {
                Credential = credential,
                Privilege  = privilege
            });
        }
        /// <summary>
        /// Removes the role associated with this Feature and the
        /// <see cref="CredentialBase"/> if it exists.
        /// </summary>
        /// <param name="credential"></param>
        /// <returns></returns>
        public virtual bool RemoveRole(CredentialBase credential)
        {
            var p = Permissions.SingleOrDefault(r => r.Feature.Equals(this) && r.Credential.Equals(credential));

            return(p != null && InternalPermissions.Remove(p));
        }