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

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

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

ניהול הרשאות בצורה חכמה

מתוזמן נעוץ נעול הועבר תכנות
15 פוסטים 7 כותבים 262 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • clickoneC מנותק
    clickoneC מנותק
    clickone
    כתב ב נערך לאחרונה על ידי
    #5

    עשיתי את זה בעבר בצורה דומה, אבל הניהול היה בקוד ע"י תישאול הDB
    שם בעיקר היה קריאה כתיבה מחיקה וכו
    ולא לפי עמודה (ברוב המקרים)

    קצת קשה (ואולי גם מסוכן) לעשות את ההרשאות ברמת הDB
    באקסס (ה"י 😮 ) זה היה אפשרי ברמת הטבלה וכו, וגם בSQL SERVER ונראה לי בשאר זה אפשרי.
    אבל אני יודע שהגישה בשנים האחרונות השתנתה בנושא הזה.

    שים לב שאם אתה משתמש בהרשאות ברמת הDB, אתה חייב שכל משתמש שלך יש לו גם משתמש ברמת הDB, וממילא הDB יודע מה ההרשאות שלו, (ללא קשר לסשן) - ז"אא אתה צריך בשליחה לשלוח גם את השם משתמש והסיסמא של הDB

    היה על זה דיון בעבר הרחוק, ואני זוכר דווקא ש @dovid צידד בעניין (היה משהו עם הרשאות של בנק נראה לי)

    תספר כמובן בסוף מה עשית,
    ואם אפשר, אז גם מה הDB שלך?

    אין טסט כמו פרודקשן.

    המייל שלי urivpn@gmail.com

    תגובה 1 תגובה אחרונה
    3
    • dovidD מחובר
      dovidD מחובר
      dovid ניהול
      כתב ב נערך לאחרונה על ידי dovid
      #6

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

      • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
      • בכל נושא אפשר ליצור קשר dovid@tchumim.com
      תגובה 1 תגובה אחרונה
      6
      • yossizY מנותק
        yossizY מנותק
        yossiz
        כתב ב נערך לאחרונה על ידי yossiz
        #7

        תודה לכולכם על התגובות המחכימות

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

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

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

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

        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

        chagoldC clickoneC 2 תגובות תגובה אחרונה
        2
        • yossizY מנותק
          yossizY מנותק
          yossiz
          השיב לWWW ב נערך לאחרונה על ידי yossiz
          #8

          @WWW אמר בניהול הרשאות בצורה חכמה:

          @yossiz במה מדובר צד שרת? איזה שפה?

          זו שאלה כללית, אשמח להפניות לספריות בכל שפה שהיא ובכל פלטפורמה שהיא שמטפלים בבעיה זו.

          📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

          תגובה 1 תגובה אחרונה
          1
          • yossizY מנותק
            yossizY מנותק
            yossiz
            השיב לnigun ב נערך לאחרונה על ידי yossiz
            #9

            @nigun אמר בניהול הרשאות בצורה חכמה:

            https://zupzup.org/casbin-http-role-auth/

            תודה רבה!
            קישור זה הוביל אותי לספרייה שבנוייה בדיוק לטפל בזה
            https://casbin.org

            עריכה: אחרי העיון זה לא עושה מה שרציתי. זה רק פריימוורק למידול ושמירה של הרשאות, (מצאתי כבר ספרייות אחרות שעושים את זה ואני משתמש באחד כזה (CASL)), אבל זה לא אוכף את ההרשאות בפועל על המשאבים, זה עדיין נשאר בידי המתכנת. אבל זו בהחלט ספרייה מעניינת.

            📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

            תגובה 1 תגובה אחרונה
            2
            • chagoldC מנותק
              chagoldC מנותק
              chagold
              השיב לyossiz ב נערך לאחרונה על ידי chagold
              #10

              @yossiz אמר בניהול הרשאות בצורה חכמה:

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

              1. ככל ויש תכנות מונחה עצמים אז אין כ"כ הרבה מקומות בקוד שצריך לתחזק משהו כיון שמעדכנים אובייקט אחד עם כל הנתונים הרלוונטיים ואח"כ ניגשים איתו ולא צריך לגשת לד"ב שוב. לדוגמא יוצר יוזר עם כל ההרשאות שלו ואח"כ עם ההרשאות ניגש לפונקציות שלהם יש לו גישה (או לקבוצות שהוא נמצא, שגם הם מופיעים כמתודה בתוך האובייקט הזה).
              2. לגבי עצם הגישה לפונקציות, (אני לא יודע אם זוהי הדרך הנכונה ביותר, אבל ככה אני עושה), ניתן לעשות שער API עם רשימת פונקציות (מסודרות בטבלה), ועוד טבלה של הרשאות ליוזר לפי id פונקציה. ככה תמיד הגישה היא רק מתוך הרשימה של הפונקציות שאושרו ליוזר.
              תגובה 1 תגובה אחרונה
              3
              • clickoneC מנותק
                clickoneC מנותק
                clickone
                השיב לyossiz ב נערך לאחרונה על ידי
                #11

                @yossiz
                ואתה חשבת שמתכנתים מלקקים דבש 😛 🙂

                אין טסט כמו פרודקשן.

                המייל שלי urivpn@gmail.com

                yossizY תגובה 1 תגובה אחרונה
                4
                • yossizY מנותק
                  yossizY מנותק
                  yossiz
                  השיב לclickone ב נערך לאחרונה על ידי yossiz
                  #12

                  @clickone יפה מאוד...
                  האם זה אומר שאתה מסכים רעיונית שיש מקום לספרייה כזאת?

                  אגב, ב-CASL (שאני משתמש בו) יש תמיכה עבור מונגו ליצור שאילתה אוטומטית לפי ההרשאות.

                  📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                  dovidD תגובה 1 תגובה אחרונה
                  0
                  • dovidD מחובר
                    dovidD מחובר
                    dovid ניהול
                    השיב לyossiz ב נערך לאחרונה על ידי
                    #13

                    @yossiz תתאר מה יש בCASL או תתאר בגדול איך יעבוד הפרימוורק אותו אתה שואף שיהיה.
                    נניח יש JSON ושמה מגדירים רשימת משתמשים ועל כל משתמש טבלאות מורשות פעולות מורשות מאפיינים וכו'.
                    כעת מכל מקום באפליקציה, קל לגרום שתהיה שגיאה במקרה של חריגה (וזה כבר דבר טוב שלא חשבתי עליו והבאת לתודעתי)
                    אבל איך ייתכן שלא יצטרכו לכתוב בכל מקום שאילתה מתאימה לrole המתאים? גם את זה ניתן להגדיר דקלרטיבית? קשה לי לדמיין, תתאר לי מה אתה חושב.

                    • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                    • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                    yossizY תגובה 1 תגובה אחרונה
                    1
                    • yossizY מנותק
                      yossizY מנותק
                      yossiz
                      כתב ב נערך לאחרונה על ידי yossiz
                      #14

                      @dovid אני מצרף pseudo code.
                      זה מבוסס באופן רופף על התחביר של CASL.
                      תחביר התנאים של CASL מבוסס על תחביר mongo.

                      ROLES.JSON

                      {
                        "user": {
                          "rules": [
                            {
                              "action": "view",
                              "subject": "project",
                              "fields": {"$not": {"$in": ["privateField1", "xxxx", "superSecret"] } }",
                              "conditions": {
                                "ownerId": "$myId"
                              }
                          ]
                        },
                        "manager": {
                          "rules": [
                            {
                              "action": "view",
                              "subject": "project",
                              "fields": ["*"],
                              "deny": false,
                              "conditions" {
                                "$or": [{ "orgId": "$myOrgId"}, {"sharedWith": { $elemMatch: "$myOrgId" } }]
                            }
                          ]
                        }
                      

                      projectController

                      class Project {
                        list (filter) {
                          let query = permsToQuery(user, 'view', 'Project');
                          query.where.push(filter);
                          db.projects.list(query);
                        }
                      }
                      
                      function permsToQuery(user, action, subject) {
                        let abilities = buildAbilities(user.roles);
                        return superMagicLibraryFunctionConvertAbilitiesToSQLWhereCondition(abilities, action, subject);
                      }
                      

                      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                      תגובה 1 תגובה אחרונה
                      1
                      • yossizY מנותק
                        yossizY מנותק
                        yossiz
                        השיב לdovid ב נערך לאחרונה על ידי yossiz
                        #15

                        @dovid
                        לא ציינתי, אבל יש אפשרות ב-CASL להפוך את ההרשאות בצורה אוטומטית לשאילתת Sequelize גם כן. (תחביר התנאים של Sequlize גם דומה מאוד לתנאי mongo)
                        כבר כתבתי קוד שעובד על פי זה.
                        אבל נטשתי את זה כי זה לא נתמך בצורה טובה.

                        https://stalniy.github.io/casl/v4/en/advanced/ability-to-database-query

                        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

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

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

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

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