صفحة التطبيق في مجلد التخطيطات تصل إلى كائن تطبيق الويب

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/95825

سؤال

توجد صفحة تطبيق، منتشرة في مجلد التخطيطات.

عنوان URL لصفحة التطبيق هو:

  • http://server:port/sc2/_layouts/test/mypage.aspx

الآن، يوجد مستخدم لديه أذونات القراءة فقط (مضاف إلى مجموعة الزوار).تتم إضافة المستخدم فقط إلى مجموعة الموقع هذه (sc2) وليس في أي مكان آخر.

يتيح الرمز إمكانية الوصول إلى مجموعة المواقع المشتركة 01 (على نفس تطبيق الويب)، ويصل إلى قائمة موجودة في مجموعة المواقع المشتركة هذه.ليس لدى المستخدم أي حق/إذن في مجموعة الموقع 01.

وهذا هو كود صفحة التطبيق:

 SPSite site = SPContext.Current.Site.WebApplication.Sites[0];

    SPWeb rootWeb = site.RootWeb;

                        SPList spList = rootWeb.Lists.TryGetList("myList");
                        if (spList != null)
                        {
                            SPQuery qry = new SPQuery();
                            qry.Query =
                            @"   <OrderBy>
      <FieldRef Name='Created' Ascending='False'/>
   </OrderBy>";
                            qry.ViewFields = @"<FieldRef Name='Title' /><FieldRef Name='Col2' />";
                            SPListItemCollection listItems = spList.GetItems(qry);
                            if (listItems.Count > 0)
                            {
                                MyDiv.InnerHtml = listItems[0]["Col2"].ToString();
                            }
                        }

عندما نقوم بتسجيل الدخول إلى جهاز الكمبيوتر باسم هذا المستخدم (مع أذونات القراءة فقط) نلاحظ أنه تم تشغيل الكود بنجاح.ألا ينبغي أن يحدث خطأ لأننا لا نستخدم RunWithElevatedPriviledges؟

أشعر أنه يجب استثناء السطر 1 وعدم المضي قدمًا.

هل كانت مفيدة؟

المحلول

الكود صحيح وهو جيد!عند الوصول إلى صفحات aspx على الخادم، لا يتم تشغيلها ضمن حساب تجمع التطبيقات، بل يتم تشغيلها ضمن حساب nt المصادق عليه والذي يجب أن يكون خاصًا بك!كيف أعرف؟أستخدم aspx في صفحة التخطيطات طوال الوقت ولن يؤثر منح/رفض الوصول إلى حساب مجمع التطبيقات على ذلك!مثال جيد سيكون اثنين من المستخدمين ..مسؤول مجموعة مواقع مشتركة وآخر مستخدم عادي.

سيكون مسؤول المجموعة قادرًا على الوصول إلى الملف بشكل جيد حيث سيتم رفض وصول المستخدم العادي ...كلاهما كما يقول tweytjens يجب أن يكون لهما حق الوصول للقراءة لكنهما لا يفعلان ذلك!لماذا ؟لأنه إذا لم تقم بإضافة مجموعة المستخدمين داخل قائمة مستخدمي تطبيق الويب (ضمن المسؤول المركزي) كحق وصول للقراءة، فلن تتمكن من الوصول إلى الملفات الموجودة في الخلية بتاريخ 14/12/15!وجود امتيازات مرتفعة تحيط بالكود داخل aspx يعني أن الكود سيتم تشغيله ضمن حساب مجمع التطبيقات !!!إن وجود رمز يُرجع اسم المستخدم الخاص بك داخل aspx سيُظهر بقوة أن إجابة tweytjens صحيحة وأن إجابة tweytjens خاطئة!ضمن appoolaccount، ستحصل على حساب النظام وبدونه إذا كان لديك حق الوصول، فستحصل على حساب nt المصادق عليه والذي يجب أن يكون الحساب الذي قمت بتسجيل الدخول به!

الى جانب ذالك....لتوضيح ما يحدث..

لنفترض أن لدي موقع جذر يسمى site1 ولدي مواقع فرعية site2 وsite3.أقوم بكسر الوراثة من الموقع 2 وأمنح المستخدم إذنًا بالقراءة فقط على الموقع 2.

لذلك لا ينبغي أن يكون لديك حق الوصول إلى الموقع http://site1 ولكن ينبغي أن تكون قادرة على الوصول إلىhttp://site1/site2 دون الحصول على رفض الوصول.

السبب وراء قدرتك على الوصول إلى site2 هو أن لديك الآن وصولًا محدودًا إلى site1 لتتمكن من الوصول إلى site2.

مستوى إذن الوصول المحدود غير عادي.يمكّن المستخدم أو المجموعة من تصفح صفحة موقع أو مكتبة من أجل الوصول إلى عنصر محتوى معين.عادةً ما يتم منح المستخدم الوصول إلى عنصر واحد في قائمة أو مكتبة ، ولكن ليس لديه إذن لفتح أو تحرير أي عناصر أخرى في المكتبة.يتضمن مستوى إذن الوصول المحدود جميع الأذونات التي يحتاجها المستخدم للوصول إلى العنصر المطلوب.

لا يمكنك تعيين مستوى إذن الوصول المحدود مباشرة إلى مستخدم أو مجموعة.بدلاً من ذلك ، تقوم بتعيين إذن مناسب للعنصر المفرد ، ثم تقوم SharePoint تلقائيًا بتعيين وصول محدود إلى مواقع أخرى مطلوبة.

http://office.microsoft.com/en-gb/products/understanding-permission-levels-HA102772313.aspx?CTT=5&origin=HA102771919

المزيد عن الأذونات وأوضح بالتفصيل

http://office.microsoft.com/en-gb/office365-sharepoint-online-enterprise-help/introduction-control-user-access-with-permissions-HA102771919.aspx#_Toc352060310

يحرر

المسؤول المركزي -> إدارة التطبيقات -> إدارة تطبيقات الويب -> انقر على تطبيق الويب -> انقر على سياسة المستخدم

هذه قائمة بالمستخدمين الذين يمكنهم الوصول إلى مستوى تطبيق الويب._layouts على هذا المستوى لذا فإن وصول المستخدم سيكون على هذا المستوى.

من شأن التشغيل بامتيازات مرتفعة أن يجعل الحساب الحالي يعمل كحساب مجمع تطبيقات النظام.بدون التشغيل مع امتيازات مرتفعة، يمكنك تشغيله ضمن حسابك العادي ولكنك ستحتاج إلى الوصول للقراءة ضمن مستوى تطبيق الويب وإلا فسيتم رفض الوصول!

لمشكلة الوصول إلى موقعك والتي تتعلق جزئيًا بما ورد أعلاه وأيضًا جزئيًا بحقيقة وجود سياسة وصول محدودة تم تعيينها بواسطة نقطة المشاركة!.

يحرر

نعم لقد أوضحت بالفعل السبب!يوفر Sharepoint وصولاً مقيدًا للقراءة حتى تتمكن من الوصول إلى عنوان URL الخاص بـ sitecolection 2 وإلا فلن تتمكن من ذلك.التشغيل على الخادم ليس له علاقة به!يتم تشغيل التعليمات البرمجية تحت مستخدم الإقليم الشمالي المصادق عليه!وبالتأكيد ليس حساب تجمع التطبيقات!!

فقط لأن تشغيل الكود ضمن الخادم لا يعني تشغيله ضمن حساب مجمع التطبيقات!الطريقة الوحيدة التي يحدث ذلك هي إذا قمت بتعيين التشغيل بامتيازات مرتفعة وإلا فإنك ستمنح جميع المستخدمين وصولاً غير ضروري!لإثبات وجهة نظري!

داخل aspx.cs أضف الكود التالي، وسوف يظهر لك المستخدم الحالي...هذا هو المستخدم الذي يتم استخدام السياق الحالي فيه، وهذا المستخدم هو الذي يتم استخدامه للوصول إلى الموقع وملفات _layouts داخل الخلية!

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    string strUserName = SPContext.Current.Web.CurrentUser.LoginName;
    Label l = new Label();
    l.id = "userID";
    l.Text = strUserName;
    this.Controls.Add(l);
}

إذا رأيت حساب النظام بدلاً من حساب تجمع التطبيقات الخاص به....إذا رأيت حساب مستخدم عادي فهذا يعني أنه لا يعمل ضمن تجمع التطبيقات!إذا كان يعمل ضمن حساب مجمع التطبيقات، فيجب أن تشعر بالقلق لأن منحك وصولاً غير ضروري يتعارض مع أفضل الممارسات.

كيف أعرف أيضًا أنه يعمل تحت حساب nt المصادق عليه؟حسنًا، فقط حاول الوصول إلى الملف باعتباره مزعجًا :) سيتم رفض الوصول...لذلك تحتاج إلى انتحال الشخصية حتى أن الامتيازات المرتفعة لا تعمل!

SharePoint - تم رفض الوصول إلى المسار

نصائح أخرى

نظرًا لأن التعليمات البرمجية موجودة على صفحة .aspx، فسيتم تشغيل التعليمات البرمجية على الخادم وسيتم تشغيلها باستخدام بيانات اعتماد حساب تجمع التطبيقات الذي يعمل ضمنه هذا التطبيق وليس ضمن بيانات اعتماد العميل على سبيل المثال.سيفي رمز جانب العميل Silverlight أو Javascript بالغرض.

لا ينبغي لأي رمز أن يرمي أي استثناءات ..نظرًا لأن المستخدم لديه أذونات القراءة، وآمل أن ترث القائمة أيضًا أذونات من الموقع، فهذا يعني أن المستخدم لديه أذونات القراءة في القائمة أيضًا..

وبالتالي، إذا حاولت إضافة عنصر إلى القائمة، فيجب أن يطرح استثناءً..القراءة/الاستعلام لن يطرح أي استثناءات..

تحديث

في الواقع يبدو أن الإجابة الأخرى صحيحة

عادة ما يتم تعيين أذونات صفحات التطبيق ضمن صفحة التطبيق نفسها ، باستخدام الخاصية المطلوبة.

فيما يلي منشور مدونة شامل حول أمان صفحة التطبيق: http://blog-sharepoint.blogspot.com/2011/10/sharepoint-application-page-security.html

ألقِ نظرة أيضًا على:

تأمين صفحات تطبيق SharePoint

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى sharepoint.stackexchange
scroll top