דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. רעיון לשייך משתמשים לפעולות?

רעיון לשייך משתמשים לפעולות?

מתוזמן נעוץ נעול הועבר תכנות
10 פוסטים 5 כותבים 222 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • A מנותק
    A מנותק
    avi rz
    כתב ב נערך לאחרונה על ידי
    #1

    בס"ד

    אני מדבר על פרוייקט בnode.js+sequlize
    ישנם כמה משתמשים שאמורים לעבוד על אותם דברים (מערך מתנדבים והתנדבויות).
    הייתי מאוד רוצה לדעת על כל פעולה איזה משתמש עשה אותה כגון יצירת אירוע חדש, התקשרות עם מתנדב, מתנדב חדש וכו' וכמו"כ עדכון או מחיקה בכל אחד מאלו וכדו'.
    ברעיון ראשון חשבתי ע"ד שsequelize מוסיף תאריך יצירה, תאריך עדכון ותאריך מחיקה.
    להוסיף משתמש יצירה, משתמש עדכון ומשץמש מחיקה בכל אחד מהטבלאות.
    אך מה שמונע אותי מזה, שזה לא מספיק ברגע שמעדכנים יותר ממשתמש אחד, אני יקבל רק את האחרון ועוד שזה בלי תיעוד של זמן,
    לכן חשבתי על כיוון של: לעשות טבלה מיוחדת שכוללת:

    • שם טבלה
    • שם משתמש
    • תאריך ושעה
    • יצירה / עדכון / מחיקה
    • הצליח/כשל
    • הערה
      מעניין לשמוע את דעת הציבור בעניין.

    שאלתי באופן כללי: האם זה מכביד בכל פעולה לעשות עוד insert לטבלה ההיא,
    שבדרך הראשונה אני בעצם חוסך את זה כי אני בכל מקרה מעדכן את הרשומה ההיא.
    נ.ב. את אותו רעיון לכל בקשה לשרת, הייתי רוצה לשמור בטבלה מסוימת, אם סיכום (url-ip-סוג בקשה-סטטוס-וכו').

    dovidD י A 3 תגובות תגובה אחרונה
    2
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      השיב לavi rz ב נערך לאחרונה על ידי
      #2

      @avi-rz אני לא חושב שיש בעיה של הכבדה.

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      4
      • י מנותק
        י מנותק
        יוסף בן שמעון
        השיב לavi rz ב נערך לאחרונה על ידי
        #3

        @avi-rz לכאורה גם בלי השיקול שכתבת, למען הסדר הטוב זה חייב להיות בטבלה נפרדת, לוג לא אמור להיות חלק מהישות עצמה אלא משהו חיצוני. כשאתה שולף אובייקט אתה רוצה את השדות שלו לא את הלוג.
        בקשר לביצועים, אל תתנה את התשובה לקליינט ברישום לוג, קודם תשלח את התשובה ואחר כך תרשום ללוג, או לחילופין תכתוב ללוג בלי await ומיד אחר כך תשלח את התשובה לקליינט, כך זה לא יעכב את התשובה.

        A תגובה 1 תגובה אחרונה
        4
        • A מנותק
          A מנותק
          avi rz
          השיב ליוסף בן שמעון ב נערך לאחרונה על ידי
          #4

          @יוסף-בן-שמעון אמר ברעיון לשייך משתמשים לפעולות?:

          בקשר לביצועים, אל תתנה את התשובה לקליינט ברישום לוג, קודם תשלח את התשובה ואחר כך תרשום ללוג, או לחילופין תכתוב ללוג בלי await ומיד אחר כך תשלח את התשובה לקליינט, כך זה לא יעכב את התשובה.

          יש לך רעיון איך לעשות את זה גלובלי כמו סוג של middleware שיכניס את הנתונים רק אחרי שהבקשה נגמרת בשביל לדעת איזה סטטוס היא קבלה וכדו'?

          י תגובה 1 תגובה אחרונה
          0
          • י מנותק
            י מנותק
            יוסף בן שמעון
            השיב לavi rz ב נערך לאחרונה על ידי יוסף בן שמעון
            #5

            @avi-rz תעשה משהו כזה בראש ההיררכיה של הראוטר

            app.use((req, res, next) => {
                res.once('finish', () => {
                    console.log(req.originalUrl, req.user, req.ip, res.statusCode, res.statusMessage, res.logInfo)
                })
                next()
            })
            
            

            אתה יכול להוסיף מידע אופציונלי לאוביקט res בכל מטפל ולהדפיס אותו ברישום ללוג, משהו כזה

            res.logInfo = {someInfo: 'info'}
            
            תגובה 1 תגובה אחרונה
            2
            • A מנותק
              A מנותק
              aaron
              השיב לavi rz ב נערך לאחרונה על ידי
              #6

              @avi-rz אמר ברעיון לשייך משתמשים לפעולות?:

              הייתי מאוד רוצה לדעת על כל פעולה איזה משתמש עשה אותה כגון יצירת אירוע חדש, התקשרות עם מתנדב, מתנדב חדש וכו' וכמו"כ עדכון או מחיקה בכל אחד מאלו וכדו'.

              אני חושב שהשאלה הראשונה היא מה הצורך במידע הזה.
              האם לצורך לוגים ודיבוג, האם לצורכי אבטחה, או שבכלל כחלק מהאפליקציה עצמה, אתה מעוניין להציג היסטוריית שינויים.

              במידה והנושא הוא לוגים ו\או אבטחה - הדרך הנכונה היא לוגים. לא דאטאבייס.
              זה פשוט מיועד לזה, זה נותן לך קונטקסט נוסף מעבר לרק מה היה השינוי ומי גרם לו. זה חסכוני בעלויות מקום (על חשבון זמינות ומהירות תשאול) לא מכביד לך על הDB ולא יגרום בעיות בסקייל גבוה יותר. תוכל גם להגדיר כל כמה זמן למחוק דאטא ישן.
              התממשקות לכלים סטנדרטיים בתחום, loki, grafana וכדומה. ואז יש לך יכולת לתשאל את הלוגים שלך בצורה חכמה.
              יש פרויקטים לייצוא של הלוגים ישירות לloki. הם ידעו לעשות את זה נכון בלי לתקוע לך את הevent loop בהמתנה לשליחה של הלוג לDB..

              במידה ויש צורך בהיסטוריה לצורך האפליקציה עצמה - אז תרצה שהמידע יהיה יותר מדויק, זמין ומהיר בתשאול. לכן נדרש DB.
              לדעתי בדיוק לצורך כך יש triggers. אתה מגדיר מה לעשות עבור כל פעולה שקורת בטבלאות ספציפיות. במקרה שלך - לשמור לוג בטבלה נוספת.
              החלק היחידי הבעייתי הוא שקצת יותר מורכב להוסיף את המידע של היוזר שגרם לפעולה. אבל זה ניתן לפתירה אני חושב.

              aaron.tchumim@gmail.com
              Hetzner - שרתים וירטואליים ופיזיים במחירים מעולים (קישור שותפים)

              ווצאפ API - תיעוד שירות API לא רשמי.

              A תגובה 1 תגובה אחרונה
              4
              • A מנותק
                A מנותק
                avi rz
                השיב לaaron ב נערך לאחרונה על ידי
                #7

                @aaron אמר ברעיון לשייך משתמשים לפעולות?:

                אני חושב שהשאלה הראשונה היא מה הצורך במידע הזה.
                האם לצורך לוגים ודיבוג, האם לצורכי אבטחה, או שבכלל כחלק מהאפליקציה עצמה, אתה מעוניין להציג היסטוריית שינויים.

                כן , מיועד למנהלי המערכת, שאין להם גישה לקוד.

                @aaron אמר ברעיון לשייך משתמשים לפעולות?:

                החלק היחידי הבעייתי הוא שקצת יותר מורכב להוסיף את המידע של היוזר שגרם לפעולה. אבל זה ניתן לפתירה אני חושב.

                לא כ"כ הבנתי, אני משתמש כרגע ב sequelize ודי הרבה בקשרי גומלין,
                מספיק שאני יכניס שם את הid של במשתמש,
                כשאני ישלוף את השורה אני יוכל לקבל את כל הפרטים שלו.

                OdedDvirO תגובה 1 תגובה אחרונה
                0
                • OdedDvirO מנותק
                  OdedDvirO מנותק
                  OdedDvir
                  השיב לavi rz ב נערך לאחרונה על ידי
                  #8

                  @avi-rz אמר ברעיון לשייך משתמשים לפעולות?:

                  לא כ"כ הבנתי

                  הכוונה היתה שה-DB לא יודע מי המשתמש שמחובר כרגע לתוכנה, ומה ה-ID שלו, כך שלכתוב טריגר בתוך ה-DB עצמו יהיה מורכב.

                  A תגובה 1 תגובה אחרונה
                  0
                  • A מנותק
                    A מנותק
                    avi rz
                    השיב לOdedDvir ב נערך לאחרונה על ידי
                    #9

                    @odeddvir אמר ברעיון לשייך משתמשים לפעולות?:

                    הכוונה היתה שה-DB לא יודע מי המשתמש שמחובר כרגע לתוכנה, ומה ה-ID שלו

                    למה לא, ברור שאני מדשייך קודם User לבקשה ההיא, בשביל הרשאות וכדו'.

                    OdedDvirO תגובה 1 תגובה אחרונה
                    0
                    • OdedDvirO מנותק
                      OdedDvirO מנותק
                      OdedDvir
                      השיב לavi rz ב נערך לאחרונה על ידי OdedDvir
                      #10

                      @avi-rz אני אסביר ביחס ל-Sql-Server, אני לא יודע באיזה db אתה משתמש, ויתכן שהפתרון פשוט יותר ב-db אחר.
                      ל"בקשה" אני בדר"כ מתייחס כ-Stored Procedure, ואכן אני יכול להעביר אליה כפרמטר את ה-id של המשתמש. הכל טוב ויפה כשניהול ההרשאות מבוצע ברמת הקוד.

                      אבל כשאני כותב טריגר אני כותב אותו ברמת ה-DB, ומצמיד אותו לפעולה מסויימת על טבלה, שיכולה להתבצע מכל מיני SP-ים שונים, או אפילו כתוצאה מפעולה ישירה בטבלה (למרות שזה לא מצוי לשנות טבלאות ישירות מהקוד). כיצד אדע אז לשלוף את ה-ID משם? אני צריך קודם לדעת איזה משתמש הפעיל את הטריגר, וב-SQL Server זה עשוי להיות מורכב.

                      למען האמת אני לא יודע על דרך ברורה לעשות את זה. אולי צריך להגדיר הרשאות משתמשים ברמת ה-DB על ידי Roles, אבל זה יתן מידע כללי, לאיזה Role שייך המשתמש. אפשר גם לדעת איזה משתמש Windows הפעיל את הטריגר, אבל זה לא מה שאתה צריך.

                      תגובה 1 תגובה אחרונה
                      2

                      בא תתחבר לדף היומי!
                      • התחברות

                      • אין לך חשבון עדיין? הרשמה

                      • התחברו או הירשמו כדי לחפש.
                      • פוסט ראשון
                        פוסט אחרון
                      0
                      • דף הבית
                      • קטגוריות
                      • פוסטים אחרונים
                      • משתמשים
                      • חיפוש
                      • חוקי הפורום