using System; using System.Web; using umbraco.presentation.LiveEditing; using umbraco.BasePages; using umbraco.cms.businesslogic.web; namespace umbraco.presentation { /// /// Class that encapsulates Umbraco information of a specific HTTP request. /// public class UmbracoContext { private HttpContext m_HttpContext; /// /// Gets the current Umbraco Context. /// public static UmbracoContext Current { get { return (UmbracoContext)HttpContext.Current.Items["UmbracoContext"]; } set { if (Current != null) throw new ApplicationException("The current httpContext can only be set once during a request."); HttpContext.Current.Items["UmbracoContext"] = value; } } /// /// Gets the current page ID, or null if no page ID is available (e.g. a custom page). /// public virtual int? PageId { get { try { return int.Parse(m_HttpContext.Items["pageID"].ToString()); } catch { return null; } } } /// /// Determines whether the current user has the specified permission on the current page. /// /// The permission token. /// /// true if the user has permission; otherwise, false. /// public virtual bool HasPermission(char permissionToken) { int? pageId = UmbracoContext.Current.PageId; return pageId.HasValue && UmbracoEnsuredPage.CurrentUser != null && UmbracoEnsuredPage.CurrentUser.GetPermissions(new Document(pageId.Value).Path) .Contains(permissionToken.ToString()); } /// /// Gets the current Live Editing Context. /// public virtual ILiveEditingContext LiveEditingContext { get { ILiveEditingContext value = (ILiveEditingContext)m_HttpContext.Items["LiveEditingContext"]; if (value == null) { LiveEditingContext = value = new DefaultLiveEditingContext(); } return value; } set { m_HttpContext.Items["LiveEditingContext"] = value; } } /// /// Creates a new Umbraco context. /// /// The HTTP context on which the Umbraco context operates. public UmbracoContext(HttpContext httpContext) { m_HttpContext = httpContext; } /// /// Gets the response for the current context /// /// The response. public HttpResponse Response { get { return this.m_HttpContext.Response; } } /// /// Gets the request for the current context /// /// The request. public HttpRequest Request { get { return this.m_HttpContext.Request; } } } }