text:
Author Affiliations: Departments of Neurology (Drs de Lau and Koudstaal) and Epidemiology and Biostatistics (Drs de Lau, Hofman, and Breteler), Erasmus Medical Center, Rotterdam, the Netherlands.
Neuronal degeneration and dopamine loss in the preclinical phase of Parkinson disease may produce subtle complaints before clinically recognizable symptoms emerge.
To examine whether subjective complaints of stiffness, slowness, tremors, or postural imbalance in persons without clinical signs of parkinsonism are related to an increased risk of future Parkinson disease.
Population-based cohort study. We recorded subjective complaints of stiffness, slowness of movement, tremors, falling, or a feeling of imbalance in a standardized interview of 6038 participants without dementia in whom no parkinsonian signs were found on physical examination at baseline, and we studied them prospectively for the occurrence of incident Parkinson disease.
General population.
A total of 6038 participants who were free of dementia and parkinsonian signs.
Main Outcome Measures
Incident Parkinson disease. Participants were examined in person both at baseline (January 1990–June 1993) and at 2 follow-up visits (September 1993–December 1994 and April 1997–December 1999), and the cohort was continuously monitored through computerized linkage of the study database to general practitioners' medical records. We analyzed the data using Cox proportional hazards regression models.
Participants who reported stiffness, tremors, or imbalance at baseline had a significantly increased risk of developing Parkinson disease during follow-up (for stiffness, hazard ratio, 2.11; 95% confidence interval, 1.25-3.55; P = .005; for tremors, hazard ratio, 2.09; 95% confidence interval, 1.12-3.90; P = .002; and for imbalance, hazard ratio, 3.47; 95% confidence interval, 1.69-7.00; P = .001).
Subjective complaints of stiffness, tremors, and imbalance are associated with an increased risk of future Parkinson disease and may reflect early effects of dopamine shortage, even when standard neurological testing cannot yet demonstrate any motor symptoms.
Parkinson disease (PD) is caused by a selective degeneration of the dopaminergic neurons in the substantia nigra of the brain.1 The typical clinical signs of PD (tremor, rigidity, bradykinesia, and postural instability) begin to appear when degeneration and associated dopamine loss exceed 50%.2,3 Manifest PD is thus preceded by a preclinical phase of several years during which neuronal degeneration develops without motor symptoms being present yet.4 Evidence suggests, however, that nonmotor abnormalities may occur during this phase, such as olfactory dysfunction, personality disturbances, and depression.3,5- 8 More general nonspecific symptoms have also been described to predate the typical PD signs for several years.9 We hypothesized that moderate dopamine deficiency in preclinical PD might result in subtle subjective complaints specifically related to motor function, and we examined whether these complaints were associated with an increased risk of PD in the future in a prospective population-based cohort study.
The Rotterdam study is a prospective population-based cohort study of determinants of diseases in elderly persons.10 Of all inhabitants aged 55 years and older of a district of Rotterdam, the Netherlands, 7983 subjects (response rate, 77.7%) agreed to participate. Both at baseline (January 1990–June 1993) and in 2 follow-up rounds (September 1993–December 1994 and April 1997–December 1999), all of the participants were interviewed and underwent extensive physical examination, including cognitive screening and screening for parkinsonian signs.11- 13 In addition, the cohort was continuously monitored for major disease outcomes and mortality through computerized linkage to general practitioners' medical files. Informed consent was obtained from each participant, and the Medical Ethics Committee of the Erasmus Medical Center, Rotterdam, approved the study.
At baseline, all of the participants were interviewed at their homes by means of a standardized questionnaire. This questionnaire included a set of 5 symptom-specific questions that concerned the 4 cardinal signs that are characteristic of PD. Participants were asked to indicate whether they ever experienced stiffness (rigidity), tremors of the head, arms, or legs (resting tremor), slowness of movement (bradykinesia), falling, or a feeling of imbalance (with falling and feeling of imbalance both related to postural imbalance). We assessed imbalance in a stepwise fashion by asking participants whether they ever experienced dizziness, and if so, to specify whether this concerned a near-fainting sensation (presyncope), spinning sensation (vertigo), feeling of imbalance (disequilibrium), or the perception of lacking control over leg movement.
At both baseline and follow-up, we used a 2-phase design to identify subjects with PD.12,13 All of the participants were screened for parkinsonian signs (rigidity, resting tremor, bradykinesia, and impaired postural reflexes) in a standardized way. Individuals who screened positive received a structural diagnostic workup comprising the Unified Parkinson Disease Rating Scale14 and neurological examination. Additional information obtained from the computerized surveillance system was reviewed by a panel of neurologists and research physicians. A neurologist examined persons who were suspected of having PD to confirm the diagnosis. Parkinsonism was diagnosed if at least 2 parkinsonian signs were present in a subject not receiving antiparkinsonian drugs or if at least 1 sign had improved after the subject began receiving medication. Parkinson disease was diagnosed when all of the causes of secondary parkinsonism (parkinsonism due to dementia, use of neuroleptics, cerebrovascular disease, multiple system atrophy, or progressive supranuclear palsy) could be excluded.
At baseline, 6818 participants underwent neurological screening and provided information on subjective complaints. Of those participants, 116 were diagnosed with any parkinsonism, including 89 PD cases.12 To examine the relationship between baseline subjective complaints and the risk of incident PD, we excluded all of the participants diagnosed with any parkinsonism or dementia at baseline, as they could no longer fulfill the criteria for incident PD.12 Because absence of parkinsonism does not preclude the presence of 1 cardinal sign and to be maximally sure to evaluate subjects free of any parkinsonism, we only studied participants in whom none of the parkinsonian signs were found during the baseline neurological screening. This resulted in a study population at risk for PD of 6038 persons free of parkinsonian signs and dementia at baseline.
Because the complaints that we studied specifically concerned the cardinal signs of PD, we first evaluated whether they were cross-sectionally related to the presence of PD at baseline. Odds ratios for PD according to the presence of each complaint were calculated through binary logistic regression and were adjusted for age and sex. To examine the association between baseline complaints in participants without dementia who were free of parkinsonian signs and the risk of future PD, we used Cox proportional hazards regression analysis to calculate hazard ratios adjusted for age and sex.
Baseline characteristics of the study population are shown in Table 1. The prevalence of self-reported complaints suggestive for parkinsonism appears considerably high in the elderly population, even in persons without any parkinsonian signs on physical examination. More than half of the participants (52.1%) reported at least 1 of the 5 complaints related to the typical features of PD. Stiffness was reported by almost one third of the study population, slowness by one fifth, and tremors, imbalance, and falling each by over 10% (Table 1). Results of the cross-sectional analysis are shown in Table 2. The vast majority (92.1%) of individuals diagnosed with PD at baseline had at least 1 complaint, and 75.3% reported at least 2 complaints. As expected, reported stiffness, falling, and especially slowness of movement and tremors were strongly related to the presence of PD at baseline.
Table 3 shows the relationship between reported complaints at baseline and the risk of developing PD during follow-up in participants without dementia who screened negative for any parkinsonian signs on routine examination. Follow-up information was available for 98.8% of the participants, either through in-person reexamination or the continuous surveillance system. Complete in-person reexamination was performed in 80.6% of the participants (84.6% of those still alive) in the first follow-up round and in 62.4% (74.4% of those still alive) in the second follow-up round. During a total of 35 429 person-years of follow-up (mean follow-up, 5.8 years), 56 new cases of PD were identified. Of those, 43 cases were detected through the structured workup at the research center and 13 through the computerized surveillance system. Mean (SD) follow-up after disease onset of the incident cases was 4.3 (1.8) years.11 Of the participants who developed PD during follow-up, 71.8% had reported at least 1 complaint and 41.0% reported at least 2 complaints related to motor function at baseline. Complaints of stiffness at baseline were significantly associated with more than a 2-fold increased risk of future PD (hazard ratio, 2.11; 95% confidence interval, 1.25-3.55; P = .005), as were reported tremors of arms, legs, or head (hazard ratio, 2.09; 95% confidence interval, 1.12-3.90; P = .002). Interestingly, self-reported falling and slowness of movement, which were both significantly cross-sectionally related to the presence of PD at baseline (both P<.001), were not prospectively associated with an increased risk of future PD (P = .23 and P = .18, respectively). A feeling of imbalance, on the other hand, showed a strong association with a future diagnosis of PD (hazard ratio, 3.47; 95% confidence interval, 1.69-7.00; P = .001) but no significant association with the presence of PD at baseline (P = .52).
In this population-based study, a considerable proportion of the elderly participants experienced stiffness, slowness, tremors, falling, or a feeling of imbalance. Even among persons without any parkinsonian signs on clinical examination, more than half of the participants reported at least 1 of these complaints. Furthermore, persons who reported stiffness, tremors, or a feeling of imbalance at baseline had an increased risk of developing PD during follow-up. One of the major strengths of this study is its prospective design; complaints were assessed while future disease status was unknown, and therefore, recall bias is not an issue. Moreover, we used in-person screening of participants instead of register-based methods to assess parkinsonism. This limits the possibility that at baseline, participants with relatively early or mild PD who had not yet sought medical attention were incorrectly diagnosed as not having PD. We restricted our study population to those participants in whom no abnormalities were found on physical examination specifically aimed at detecting parkinsonian signs. We also believe that incorrect diagnoses during follow-up were unlikely. Follow-up was almost complete, we applied strict diagnostic criteria for PD, and we continued to follow up participants after a diagnosis had been made, which enabled us to revise diagnoses on the basis of additional information if necessary.12 Unfortunately, we could not perform in-person reexaminations of all of the participants owing to death, refusal, or inability to visit the research center because of disease or handicaps. One might thus argue that incident PD cases may have been missed, probably especially those with the postural instability gait disorder–dominant form of PD, which is more difficult to diagnose without standardized screening. However, since the majority of participants underwent direct examination and the computerized surveillance system provided virtually complete coverage for those who could not be seen, we think this possibility is limited and will not have affected our results substantially. Limitations of the baseline questionnaire include absence of questions on the duration of reported complaints, which precludes potentially interesting subanalyses, and the fact that both limb and head tremor were assessed in 1 question. Because head tremor usually is not considered typical for PD, a question about limb tremor only would probably have yielded more PD-specific results.
Our findings support the notion that clinically manifest PD is preceded by a preclinical phase that is not entirely asymptomatic. Subjective complaints related to motor function might indicate a very early phase of not-yet-diagnosable PD during which dopamine loss is not sufficient to produce overt typical PD symptoms but may result in subtle signs that are very mild or only intermittently present and therefore not likely to be detected in routine screening or examination. In our study, falling was related cross-sectionally but not prospectively to the risk of PD whereas the opposite held true for a subjective feeling of imbalance. Perceived imbalance may be a very early symptom that progresses to overt postural instability and an increased risk of falling later in the course of the disease. In the same way, a subjective feeling of stiffness may precede clinically detectable rigidity, and patients may experience occasional tremors long before clinical examination confirms their perception.
It has been observed that prior to developing clinically manifest PD, many patients experience a range of nonspecific symptoms, such as depression, fatigue, anxiety, or pain.8,9 Similar findings have been observed in prospective studies15- 18 of Alzheimer disease or cerebral small vessel disease that showed that subjective memory complaints in persons without objective cognitive impairment were associated with an increased risk of developing dementia or more white matter lesions. Both PD and Alzheimer disease are characterized by a phase of neuronal degeneration and loss of function before the appearance of typical symptoms,4 and apparently, such a preclinical phase also exists in slowly progressive vascular disease. Researchers have shown particular interest in possible markers of preclinical disease since putative neuroprotective agents would ideally be administered as early as possible in the degenerative process and preferably before clinical symptoms appear.19,20 Several potential biomarkers for presymptomatic PD are now being investigated, such as loss of the dopamine transporter detected by positron emission tomographic imaging, subtle abnormalities on psychological testing, olfactory dysfunction, and biochemical markers in serum or cerebrospinal fluid.5,20,21 A questionnaire on complaints related to motor function is in itself probably of limited use as a preclinical marker. In spite of the strong associations between self-reported complaints and the risk of future PD, the specificity will be low given the high proportion of elderly persons reporting these complaints. Combined with the relatively low prevalence and incidence of PD in the general population,12,22 this will result in a low positive predictive value (defined as the proportion of persons with a positive test who will actually develop the disease). As a matter of fact, in our data, each of the subjective complaints had a positive predictive value of no higher than 1.0% to 2.5%, which is clearly insufficient for a questionnaire to be used alone as a marker for preclinical disease. It is, however, generally believed that a single test will unlikely fulfill all of the criteria for the ideal biomarker and that, presumably, a stepwise approach with a simple and inexpensive initial screening test is required.4,20 A questionnaire on subjective complaints might qualify for being part of such a first step.
Correspondence: Monique M. B. Breteler, MD, PhD, Department of Epidemiology and Biostatistics, Erasmus Medical Center, PO Box 1738, 3000 DR Rotterdam, the Netherlands (email@example.com).
Published Online: January 9, 2006 (doi:10.1001/archneur.63.3.noc50312).
Accepted for Publication: November 4, 2005.
Author Contributions:Study concept and design: de Lau and Breteler. Acquisition of data: de Lau, Koudstaal, and Breteler. Drafting of the manuscript: de Lau and Breteler. Critical revision of the manuscript for important intellectual content: de Lau, Koudstaal, Hofman, and Breteler. Statistical analysis: de Lau and Breteler. Obtained funding: Hofman and Breteler. Study supervision: Breteler.
Funding/Support: This study was supported by grant 015.000.083 from the Netherlands Organization for Scientific Research, The Hague. The Rotterdam Study is supported by the Erasmus Medical Center and Erasmus University, Rotterdam, the Netherlands; the Netherlands Organization for Scientific Research, the Netherlands Organization for Health Research and Development, the Research Institute for Diseases in the Elderly, the Ministry of Education, Culture, and Science, and the Ministry of Health, Welfare, and Sports, The Hague; the European Commission (DG XII), Brussels, Belgium; and the municipality of Rotterdam.
Role of the Sponsor: The sponsors of the study had no role in study design, data collection, data analysis, or writing of the report.
Acknowledgment: The contributions of the general practitioners and pharmacists of the Ommoord district to the Rotterdam Study are gratefully acknowledged.
Thank you for submitting a comment on this article. It will be reviewed by JAMA Neurology editors. You will be notified when your comment has been published. Comments should not exceed 500 words of text and 10 references.
Do not submit personal medical questions or information that could identify a specific patient, questions about a particular case, or general inquiries to an author. Only content that has not been published, posted, or submitted elsewhere should be submitted. By submitting this Comment, you and any coauthors transfer copyright to the journal if your Comment is posted.
* = Required Field
Disclosure of Any Conflicts of Interest*
Indicate all relevant conflicts of interest of each author below, including all relevant financial interests, activities, and relationships within the past 3 years including, but not limited to, employment, affiliation, grants or funding, consultancies, honoraria or payment, speakers' bureaus, stock ownership or options, expert testimony, royalties, donation of medical equipment, or patents planned, pending, or issued. If all authors have none, check "No potential conflicts or relevant financial interests" in the box below. Please also indicate any funding received in support of this work. The information will be posted with your response.
Some tools below are only available to our subscribers or users with an online account.
Download citation file:
Customize your page view by dragging & repositioning the boxes below.
More Listings atJAMACareerCenter.com >
The Rational Clinical Examination: Evidence-Based Clinical Diagnosis
The Rational Clinical Examination: Evidence-Based Clinical Diagnosis
Make the Diagnosis: Parkinsonism
All results at
JAMAevidence.com >
Enter your username and email address. We'll send you a link to reset your password.
Enter your username and email address. We'll send instructions on how to reset your password to the email address we have on record.
Need assistance?
Athens and Shibboleth are access management services that provide single sign-on to protected resources. They replace the multiple user names and passwords necessary to access subscription-based content with a single user name and password that can be entered once per session. It operates independently of a user's location or IP address. If your institution uses Athens or Shibboleth authentication, please contact your site administrator to receive your user name and password.


text:
Role-Based Authorization (VB)
This tutorial starts with a look at how the Roles framework associates a user's roles with his security context. It then examines how to apply role-based URL authorization rules. Following that, we will look at using declarative and programmatic means for altering the data displayed and the functionality offered by an ASP.NET page.
In the User-Based Authorization
tutorial we saw how to use URL authorization to specify what users could visit a
particular set of pages. With just a little bit of markup in
Web.config, we could
instruct ASP.NET to allow only authenticated users to visit a page. Or we could
dictate that only users Tito and Bob were allowed, or indicate that all authenticated
users except for Sam were permitted.
In addition to URL authorization, we also looked at declarative and programmatic techniques for controlling the data displayed and the functionality offered by a page based on the user visiting. In particular, we created a page that listed the contents of the current directory. Anyone could visit this page, but only authenticated users could view the files' contents and only Tito could delete the files.
Applying authorization rules on a user-by-user basis can grow into a bookkeeping nightmare. A more maintainable approach is to use role-based authorization. The good news is that the tools at our disposal for applying authorization rules work equally well with roles as they do for user accounts. URL authorization rules can specify roles instead of users. The LoginView control, which renders different output for authenticated and anonymous users, can be configured to display different content based on the logged in user's roles. And the Roles API includes methods for determining the logged in user's roles.
This tutorial starts with a look at how the Roles framework associates a user's roles with his security context. It then examines how to apply role-based URL authorization rules. Following that, we will look at using declarative and programmatic means for altering the data displayed and the functionality offered by an ASP.NET page. Let's get started!
Understanding How Roles are Associated with a User's Security Context
Whenever a request enters the ASP.NET pipeline it is associated with a security
context, which includes information identifying the requestor. When using forms
authentication, an authentication ticket is used as an identity token. As we discussed
in the An Overview of Forms Authentication
and Forms Authentication Configuration and Advanced Topics tutorials, the
FormsAuthenticationModule is responsible
for determining the identity of the requestor, which it does during the
AuthenticateRequest event.
If a valid, non-expired authentication ticket is found, the
decodes it to ascertain the requestor's identity. It creates a new
object and assigns this to the
HttpContext.User object. The purpose of a principal,
GenericPrincipal, is to identify the authenticated user's name and what
roles she belong to. This purpose is evident by the fact that all principal objects
have an
Identity property and an
IsInRole(roleName) method. The
however, is not interested in recording role information and the
object it creates does not specify any roles.
If the Roles framework is enabled, the
RoleManagerModule HTTP Module steps in after the
and identifies the authenticated user's roles during the
PostAuthenticateRequest event, which fires after the
event. If the request is from an authenticated user, the
RoleManagerModule overwrites
GenericPrincipal object created by the
FormsAuthenticationModule and replaces
it with a
RolePrincipal object. The
RolePrincipal class uses the Roles API to determine
what roles the user belongs to.
Figure 1 depicts the ASP.NET pipeline workflow when using forms authentication and
the Roles framework. The
FormsAuthenticationModule executes first, identifies the
user via her authentication ticket, and creates a new
GenericPrincipal object. Next,
RoleManagerModule steps in and overwrites the
GenericPrincipal object with a
RolePrincipal object.
If an anonymous user visits the site, neither the
FormsAuthenticationModule nor
RoleManagerModule creates a principal object.
Caching Role Information in a Cookie
RolePrincipal object's
IsInRole(roleName) method calls
to get the roles for the user in order to determine whether the user is a member
of roleName. When using the
SqlRoleProvider, this results in a query to the
role store database. When using role-based URL authorization rules the
IsInRole method will be called on every request to a page that is protected by the
role-based URL authorization rules. Rather than have to lookup the role information
in the database on every request, the
Roles framework includes an option to cache
the user's roles in a cookie.
If the Roles framework is configured to cache the user's roles in a cookie,
RoleManagerModule creates the cookie during the ASP.NET pipeline's
EndRequest event. This cookie is used in subsequent requests in the
which is when the
RolePrincipal object is created. If the cookie is valid and has
not expired, the data in the cookie is parsed and used to populate the user's
roles, thereby saving the
RolePrincipal from having to make a call to the
class to determine the user's roles. Figure 2 depicts this workflow.
By default, the role cache cookie mechanism is disabled. It can be enabled through
<roleManager>; configuration markup in
Web.config. We discussed using the
element to specify Role providers in the Creating and Managing Roles tutorial, so you should
already have this element in your application's
Web.config file. The role
cache cookie settings are specified as attributes of the
<roleManager>; element,
and are summarized in Table 1.
Note: The configuration settings listed in Table 1 specify the properties of the resulting role cache cookie. For more information on cookies, how they work, and their various properties, read this Cookies tutorial.
A Boolean value that indicates whether cookie caching is used. Defaults to
The name of the role cache cookie. The default value is ".ASPXROLES".
The path for the roles name cookie. The path attribute enables a developer to limit the scope of a cookie to a particular directory hierarchy. The default value is "/", which informs the browser to send the authentication ticket cookie to any request made to the domain.
Indicates what techniques are used to protect the role cache cookie. The allowable
values are:
A Boolean value that indicates whether an SSL connection is required to transmit
the authentication cookie. The default value is
A Boolean value that indicates whether the cookie's timeout is reset each time the
user visits the site during a single session. The default value is
Specifies the time, in minutes, after which the authentication ticket cookie expires.
The default value is
A Boolean value that specifies whether the role cache cookie is a session cookie
or persistent cookie. If
Specifies the cookie's domain value. The default value is an empty string, which
causes the browser to use the domain from which it was issued (such as www.yourdomain.com).
In this case, the cookie will not be sent when making requests to subdomains,
such as admin.yourdomain.com. If you want the cookie to be passed to all subdomains
you need to customize the
Specifies the maximum number of role names that are cached in the cookie. The default
is 25. The
The reason
Let's configure our application to use non-persistent role cache cookies.
To accomplish this, update the
<roleManager> element in
Web.config to include
the following cookie-related attributes:
<roleManager enabled="true"
I updated the
<roleManager>; element by adding three attributes:
createPersistentCookie, and
cookieProtection. By setting
cacheRolesInCookie to
RoleManagerModule will now automatically cache the user's roles in a cookie
rather than having to lookup the user's role information on each request.
I explicitly set the
createPersistentCookie and
cookieProtection attributes to
All, respectively. Technically, I didn't need to specify values for these
attributes since I just assigned them to their default values, but I put them here
to make it explicitly clear that I am not using persistent cookies and that the
cookie is both encrypted and validated.
That's all there is to it! Henceforth, the Roles framework will cache the
users' roles in cookies. If the user's browser does not support cookies,
or if their cookies are deleted or lost, somehow, it's no big deal –
RolePrincipal object will simply use the
Roles class in the case that no cookie
(or an invalid or expired one) is available.
Note: Microsoft's Patterns & Practices group discourages using persistent role cache cookies. Since possession of the role cache cookie is sufficient to prove role membership, if a hacker can somehow gain access to a valid user's cookie he can impersonate that user. The likelihood of this happening increases if the cookie is persisted on the user's browser. For more information on this security recommendation, as well as other security concerns, refer to the Security Question List for ASP.NET 2.0.
Step 1: Defining Role-Based URL Authorization Rules
As discussed in the User-Based Authorization
tutorial, URL authorization offers a means to restrict access to a set of pages
on a user-by-user or role-by-role basis. The URL authorization rules are spelled
out in
Web.config using the
<authorization> element with
<allow> and
<deny> child
elements. In addition to the user-related authorization rules discussed in previous
tutorials, each
<allow> and
<deny> child element can also include:
- A particular role
- A comma-delimited list of roles
For example, the URL authorization rules grant access to those users in the Administrators and Supervisors roles, but deny access to all others:
<allow roles="Administrators, Supervisors" />
<deny users="*" />
<allow> element in the above markup states that the Administrators and
Supervisors roles are allowed; the
<deny>; element instructs that all
users are denied.
Let's configure our application so that the
CreateUserWizardWithRoles.aspx pages are only accessible to those users in the
Administrators role, while the
RoleBasedAuthorization.aspx page remains accessible
to all visitors.
To accomplish this, start by adding a
Web.config file to the
Roles folder.
Next, add the following configuration markup to
<?xml version="1.0"?>
<allow roles="Administrators" />
<deny users="*"/>
<!-- Allow all users to visit RoleBasedAuthorization.aspx -->
<location path="RoleBasedAuthorization.aspx">
<allow users="*" />
<authorization> element in the
<system.web> section indicates that
only users in the Administrators role may access the ASP.NET resources in the
directory. The
<location> element defines an alternate set of URL authorization
rules for the
RoleBasedAuthorization.aspx page, allowing all users to visit the
After saving your changes to
Web.config, log in as a user that is not in the Administrators
role and then try to visit one of the protected pages. The
will detect that you do not have permission to visit the requested resource; consequently,
FormsAuthenticationModule will redirect you to the login page. The login page
will then redirect you to the
UnauthorizedAccess.aspx page (see Figure 4). This
final redirect from the login page to
UnauthorizedAccess.aspx occurs because of
code we added to the login page in Step 2 of the User-Based Authorization tutorial. In particular, the
login page automatically redirects any authenticated user to
if the querystring contains a
ReturnUrl parameter, as this parameter indicates that
the user arrived at the login page after attempting to view a page he was not authorized
to view.
Log off and then log in as a user that is in the Administrators role. Now you should be able to view the three protected pages.
Note: When specifying URL authorization rules – for roles or users – it is
important to keep in mind that the rules are analyzed one at a time, from the top
down. As soon as a match is found, the user is granted or denied access, depending
on if the match was found in an
<allow> or
<deny> element. If no match
is found, the user is granted access. Consequently, if you want to restrict
access to one or more user accounts, it is imperative that you use a
element as the last element in the URL authorization configuration. If your URL authorization
rules do not include a
<deny> element, all users will be granted
access. For a more thorough discussion on how the URL authorization
rules are analyzed, refer back to the "A Look at How the
Uses the Authorization Rules to Grant or Deny Access" section of the User-Based
Authorization tutorial.
Step 2: Limiting Functionality Based On the Currently Logged In User's Roles
URL authorization makes it easy to specify coarse authorization rules that state what identities are permitted and which ones are denied from viewing a particular page (or all pages in a folder and its subfolders). However, in certain cases we may want to allow all users to visit a page, but limit the page's functionality based on the visiting user's roles. This may entail showing or hiding data based on the user's role, or offering additional functionality to users that belong to a particular role.
Such fine grain role-based authorization rules can be implemented either declaratively or programmatically (or through some combination of the two). In the next section we will see how to implement declarative fine grain authorization via the LoginView control. Following that, we will explore programmatic techniques. Before we can look at applying fine grain authorization rules, however, we first need to create a page whose functionality depends on the role of the user visiting it.
Let's create a page that lists all of the user accounts in the system in a GridView. The GridView will include each user's username, email address, last login date, and comments about the user. In addition to displaying each user's information, the GridView will include edit and delete capabilities. We will initially create this page with the edit and delete functionality available to all users. In the "Using the LoginView Control" and "Programmatically Limiting Functionality" sections we will see how to enable or disable these features based on the visiting user's role.
Note: The ASP.NET page we are about to build uses a GridView control to display the user accounts. Since this tutorial series focuses on forms authentication, authorization, user accounts, and roles, I do not want to spend too much time discussing the inner workings of the GridView control. While this tutorial provides specific step-by-step instructions for setting up this page, it does not delve into the details of why certain choices were made, or what effect particular properties have on the rendered output. For a thorough examination of the GridView control, check out my Working with Data in ASP.NET 2.0 tutorial series.
Start by opening the
RoleBasedAuthorization.aspx page in the
Roles folder. Drag
a GridView from the page onto the Designer and set its
ID to
UserGrid. In a moment
we will write code that calls the
GetAllUsers method and binds the resulting
MembershipUserCollection object to the GridView. The
MembershipUserCollection contains
MembershipUser object for each user account in the system;
MembershipUser objects
have properties like
LastLoginDate and so forth.
Before we write the code that binds the user accounts to the grid, let's first
define the GridView's fields. From the GridView's Smart Tag, click the
"Edit Columns" link to launch the Fields dialog box (see Figure 6).
From here, uncheck the "Auto-generate fields" checkbox in the lower
left corner. Since we want this GridView to include editing and deleting capabilities,
add a CommandField and set its
ShowEditButton and
ShowDeleteButton properties to
True. Next, add four fields for displaying the
LastLoginDate, and
Comment properties. Use a BoundField for the two read-only properties (
LastLoginDate) and TemplateFields for the two editable fields (
Have the first BoundField display the
UserName property; set its
HeaderText and
DataField properties to "UserName". This field will not be editable,
so set its
ReadOnly property to True. Configure the
LastLoginDate BoundField by
setting its
HeaderText to "Last Login" and its
DataField to "LastLoginDate".
Let's format the output of this BoundField so that just the date is displayed
(instead of the date and time). To accomplish this, set this BoundField's
HtmlEncode property to False and its
DataFormatString property to "{0:d}".
Also set the
ReadOnly property to True.
Set the
HeaderText properties of the two TemplateFields to "Email" and
We now need to define the
ItemTemplate and
EditItemTemplate for the "Email"
and "Comment" TemplateFields. Add a Label Web control to each of the
ItemTemplates and bind their
Text properties to the
Comment properties,
For the "Email" TemplateField, add a TextBox named
and bind its
Text property to the
to ensure that a visitor editing the Email property has entered a valid email address.
For the "Comment" TemplateField, add a multi-line TextBox named
to its
EditItemTemplate. Set the TextBox's
Columns and
Rows properties to
40 and 4, respectively, and then bind its
Text property to the
Comment property
using two-way databinding.
After configuring these TemplateFields, their declarative markup should look similar to the following:
<asp:TemplateField HeaderText="Email">
<asp:Label runat="server" ID="Label1" Text='<%# Eval("Email")%>'></asp:Label>
<asp:TextBox runat="server" ID="Email" Text='<%# Bind("Email")%>'></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="Email" Display="Dynamic"
ErrorMessage="You must provide an email address."
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
ControlToValidate="Email" Display="Dynamic"
ErrorMessage="The email address you have entered is not valid. Please fix
this and try again."
<asp:TemplateField HeaderText="Comment">
<asp:Label runat="server" ID="Label2" Text='<%# Eval("Comment")%>'></asp:Label>
<asp:TextBox runat="server" ID="Comment" TextMode="MultiLine"
Columns="40" Rows="4" Text='<%# Bind("Comment")%>'>
When editing or deleting a user account we will need to know that user's
property value. Set the GridView's
DataKeyNames property to "UserName"
so that this information is available through the GridView's
DataKeys collection.
Finally, add a ValidationSummary control to the page and set its
property to True and its
ShowSummary property to False. With these settings, the
ValidationSummary will display a client-side alert if the user attempts to edit
a user account with a missing or invalid email address.
<asp:ValidationSummary ID="ValidationSummary1"
ShowSummary="False" />
We have now completed this page's declarative markup. Our next task is to
bind the set of user accounts to the GridView. Add a method named
BindUserGrid to
RoleBasedAuthorization.aspx page's code-behind class that binds the
returned by
Membership.GetAllUsers to the
UserGrid GridView. Call this method from
Page_Load event handler on the first page visit.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
End If
End Sub
Private Sub BindUserGrid()
Dim allUsers As MembershipUserCollection = Membership.GetAllUsers()
UserGrid.DataSource = allUsers
End Sub
With this code in place, visit the page through a browser. As Figure 7 shows, you should see a GridView listing information about each user account in the system.
Note: The
UserGrid GridView lists all of the users in a non-paged interface. This simple
grid interface is not suitable for scenarios where there are several dozen or more
users. One option is to configure the GridView to enable paging. The
method has two overloads: one that accepts no input parameters and returns all of
the users and one that takes in integer values for the page index and page size,
and returns only the specified subset of the users. The second overload can be used
to more efficiently page through the users since it returns just the precise subset
of user accounts rather than all of them. If you have thousands of user accounts,
you might want to consider a filter-based interface, one that only shows those users
whose UserName begins with a selected character, for instance. The
Membership.FindUsersByName method is ideal for building a filter-based user
interface. We will look at building such an interface in a future tutorial.
The GridView control offers built-in editing and deleting support when the control
is bound to a properly configured data source control, such as the SqlDataSource
or ObjectDataSource. The
UserGrid GridView, however, has its data programmatically
bound; therefore, we must write code to perform these two tasks. In particular,
we will need to create event handlers for the GridView's
RowUpdating , and
RowDeleting events, which are fired when a visitor clicks the GridView's
Edit, Cancel, Update, or Delete buttons.
Start by creating the event handlers for the GridView's
RowCancelingEdit, and
RowUpdating events and then add the following code:
Protected Sub UserGrid_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles UserGrid.RowEditing
' Set the grid's EditIndex and rebind the data
UserGrid.EditIndex = e.NewEditIndex
End Sub
Protected Sub UserGrid_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles UserGrid.RowCancelingEdit
' Revert the grid's EditIndex to -1 and rebind the data
UserGrid.EditIndex = -1
End Sub
Protected Sub UserGrid_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles UserGrid.RowUpdating
' Exit if the page is not valid
If Not Page.IsValid Then
Exit Sub
End If
' Determine the username of the user we are editing
Dim UserName As String = UserGrid.DataKeys(e.RowIndex).Value.ToString()
' Read in the entered information and update the user
Dim EmailTextBox As TextBox = CType(UserGrid.Rows(e.RowIndex).FindControl("Email"),TextBox)
Dim CommentTextBox As TextBox= CType(UserGrid.Rows(e.RowIndex).FindControl("Comment"),TextBox)
' Return information about the user
Dim UserInfo As MembershipUser = Membership.GetUser(UserName)
' Update the User account information
UserInfo.Email = EmailTextBox.Text.Trim()
UserInfo.Comment = CommentTextBox.Text.Trim()
' Revert the grid's EditIndex to -1 and rebind the data
UserGrid.EditIndex = -1
End Sub
RowEditing and
RowCancelingEdit event handlers simply set the GridView's
EditIndex property and then rebind the list of user accounts to the grid. The interesting
stuff happens in the
RowUpdating event handler. This event handler starts by ensuring
that the data is valid and then grabs the
UserName value of the edited user account
from the
DataKeys collection. The
Comment TextBoxes in the two TemplateFields'
EditItemTemplates are then programmatically referenced. Their
Text properties contain
the edited email address and comment.
In order to update a user account through the Membership API we need to first get
the user's information, which we do via a call to
The returned
MembershipUser object's
Comment properties are then
updated with the values entered into the two TextBoxes from the editing interface.
Finally, these modifications are saved with a call to
Membership.UpdateUser. The
RowUpdating event handler completes by reverting
the GridView to its pre-editing interface.
Next, create the
RowDeletingRowDeleting event handler and then add the following code:
Protected Sub UserGrid_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles UserGrid.RowDeleting
' Determine the username of the user we are editing
Dim UserName As String = UserGrid.DataKeys(e.RowIndex).Value.ToString()
' Delete the user
' Revert the grid's EditIndex to -1 and rebind the data
UserGrid.EditIndex = -1
End Sub
The above event handler starts by grabbing the
UserName value from the GridView's
DataKeys collection; this
UserName value is then passed into the Membership class's
DeleteUser method. The
DeleteUser method deletes the user account from the
system, including related membership data (such as what roles this user belongs
to). After deleting the user, the grid's
EditIndex is set to -1 (in case the
user clicked Delete while another row was in edit mode) and the
BindUserGrid method
is called.
Note: The Delete button does not require any sort of confirmation from the user before deleting the user account. I encourage you to add some form of user confirmation to lessen the chance of an account being accidentally deleted. One of the easiest ways to confirm an action is through a client-side confirm dialog box. For more information on this technique, see Adding Client-Side Confirmation When Deleting.
Verify that this page functions as expected. You should be able to edit any user's
email address and comment, as well as delete any user account. Since the
page is accessible to all users, any user – even anonymous visitors –
can visit this page and edit and delete user accounts! Let's update this page
so that only users in the Supervisors and Administrators roles can edit a user's
email address and comment, and only Administrators can delete a user account.
The "Using the LoginView Control" section looks at using the LoginView control to show instructions specific to the user's role. If a person in the Administrators role visits this page, we will show instructions on how to edit and delete users. If a user in the Supervisors role reaches this page, we will show instructions on editing users. And if the visitor is anonymous or is not in either the Supervisors or Administrators role, we will display a message explaining that they cannot edit or delete user account information. In the "Programmatically Limiting Functionality" section we will write code that programmatically shows or hides the Edit and Delete buttons based on the user's role.
Using the LoginView Control
As we've seen in past tutorials, the LoginView control is useful for displaying different interfaces for authenticated and anonymous users, but the LoginView control can also be used to display different markup based on the user's roles. Let's use a LoginView control to display different instructions based on the visiting user's role.
Start by adding a LoginView above the
UserGrid GridView. As we've discussed
earlier, the LoginView control has two built-in templates:
AnonymousTemplate and
LoggedInTemplate. Enter a brief message in both of these templates that informs
the user that they cannot edit or delete any user information.
<asp:LoginView ID="LoginView1" runat="server">
You are not a member of the Supervisors or Administrators roles. Therefore you
cannot edit or delete any user information.
You are not logged into the system. Therefore you cannot edit or delete any user
In addition to the
AnonymousTemplate and
LoggedInTemplate, the LoginView control
can include RoleGroups, which are role-specific templates. Each RoleGroup
contains a single property,
Roles, which specifies what roles the RoleGroup applies
to. The
Roles property can be set to a single role (like "Administrators")
or to a comma-delimited list of roles (like "Administrators, Supervisors").
To manage the RoleGroups, click the "Edit RoleGroups" link from the
control's Smart Tag to bring up the RoleGroup Collection Editor. Add two new
RoleGroups. Set the first RoleGroup's
Roles property to "Administrators"
and the second's to "Supervisors".
Click OK to close the RoleGroup Collection Editor; this updates the LoginView's
declarative markup to include a
<RoleGroups> section with an
child element for each RoleGroup defined in the RoleGroup Collection Editor. Furthermore,
the "Views" drop-down list in the LoginView's Smart Tag - which
initially listed just the
AnonymousTemplate and
LoggedInTemplate – now includes
the added RoleGroups as well.
Edit the RoleGroups so that users in the Supervisors role are displayed instructions on how to edit user accounts, while users in the Administrators role are shown instructions for editing and deleting. After making these changes, your LoginView's declarative markup should look similar to the following.
<asp:LoginView ID="LoginView1" runat="server">
<asp:RoleGroup Roles="Administrators">
As an Administrator, you may edit and delete user accounts.
Remember: With great power comes great responsibility!
<asp:RoleGroup Roles="Supervisors">
As a Supervisor, you may edit users' Email and Comment information.
Simply click the Edit button, make your changes, and then click Update.
You are not a member of the Supervisors or Administrators roles.
Therefore you cannot edit or delete any user information.
You are not logged into the system.
Therefore you cannot edit or delete any user information.
After making these changes, save the page and then visit it through a browser. First visit the page as an anonymous user. You should be shown the message, "You are not logged into the system. Therefore you cannot edit or delete any user information." Then log in as an authenticated user, but one that is neither in the Supervisors nor Administrators role. This time you should see the message, "You are not a member of the Supervisors or Administrators roles. Therefore you cannot edit or delete any user information."
Next, log in as a user who is a member of the Supervisors role. This time you should see the Supervisors role-specific message (see Figure 9). And if you log in as a user in the Administrators role you should see the Administrators role-specific message (see Figure 10).
As the screen shots in Figures 9 and 10 show, the LoginView only renders one template,
even if multiple templates apply. Bruce and Tito are both logged in users, yet the
LoginView renders only the matching RoleGroup and not the
LoggedInTemplate. Moreover,
Tito belongs to both the Administrators and Supervisors roles, yet the LoginView
control renders the Administrators role-specific template instead of the Supervisors
Figure 11 illustrates the workflow used by the LoginView control to determine what template to render. Note that if there is more than one RoleGroup specified, the LoginView template renders the first RoleGroup that matches. In other words, if we had placed the Supervisors RoleGroup as the first RoleGroup and the Administrators as the second, then when Tito visited this page he would see the Supervisors message.
Programmatically Limiting Functionality
While the LoginView control displays different instructions based on the role of
the user visiting the page, the Edit and Cancel buttons remain visible to all. We
need to programmatically hide the Edit and Delete buttons for anonymous visitors
and users who are in neither the Supervisors nor Administrators role. We need to
hide the Delete button for everyone who is not an Administrator. In order to accomplish
this we will write a bit of code that programmatically references the CommandField's
Edit and Delete LinkButtons and sets their
Visible properties to
False, if necessary.
The easiest way to programmatically reference controls in a CommandField is to first
convert it to a template. To accomplish this, click the "Edit Columns"
link from the GridView's Smart Tag, select the CommandField from the list
of current fields, and click the "Convert this field into a TemplateField"
link. This turns the CommandField into a TemplateField with an
ItemTemplate and
EditItemTemplate. The
ItemTemplate contains the Edit and Delete LinkButtons while
EditItemTemplate houses the Update and Cancel LinkButtons.
Update the Edit and Delete LinkButtons in the
ItemTemplate, setting their
ID properties
to values of
EditButton and
DeleteButton, respectively.
<asp:TemplateField ShowHeader="False">
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True"
CommandName="Update" Text="Update"></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False"
CommandName="Cancel" Text="Cancel"></asp:LinkButton>
<asp:LinkButton ID="EditButton" runat="server" CausesValidation="False"
CommandName="Edit" Text="Edit"></asp:LinkButton>
<asp:LinkButton ID="DeleteButton" runat="server" CausesValidation="False"
CommandName="Delete" Text="Delete"></asp:LinkButton>
Whenever data is bound to the GridView, the GridView enumerates the records in its
DataSource property and generates a corresponding
GridViewRow object. As each
object is created, the
RowCreated event is fired. In order to hide the Edit and
Delete buttons for unauthorized users, we need to create an event handler for this
event and programmatically reference the Edit and Delete LinkButtons, setting their
Visible properties accordingly.
Create an event handler the
RowCreated event and then add the following code:
Protected Sub UserGrid_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles UserGrid.RowCreated
If e.Row.RowType = DataControlRowType.DataRow AndAlso e.Row.RowIndex <> UserGrid.EditIndex Then
' Programmatically reference the Edit and Delete LinkButtons
Dim EditButton As LinkButton = CType(e.Row.FindControl("EditButton"), LinkButton)
Dim DeleteButton As LinkButton = CType(e.Row.FindControl("DeleteButton"), LinkButton)
EditButton.Visible = (User.IsInRole("Administrators") OrElse User.IsInRole("Supervisors"))
DeleteButton.Visible = User.IsInRole("Administrators")
End If
End Sub
Keep in mind that the
RowCreated event fires for all of the GridView rows,
including the header, the footer, the pager interface, and so forth. We only want
to programmatically reference the Edit and Delete LinkButtons if we are dealing
with a data row not in edit mode (since the row in edit mode has Update and Cancel
buttons instead of Edit and Delete). This check is handled by the
If statement.
If we are dealing with a data row that is not in edit mode, the Edit and Delete
LinkButtons are referenced and their
Visible properties are set based on the Boolean
values returned by the
User object's
IsInRole(roleName) method. The
User object references the principal created by the
RoleManagerModule; consequently,
IsInRole(roleName) method uses the Roles API to determine whether the
current visitor belongs to roleName.
Note: We could have used the Roles class directly, replacing the call to
with a call to the
Roles.IsUserInRole(roleName) method. I decided to use the principal
IsInRole(roleName) method in this example because it is more
efficient than using the Roles API directly. Earlier in this tutorial we configured
the role manager to cache the user's roles in a cookie. This cached cookie
data is only utilized when the principal's
IsInRole(roleName) method
is called; direct calls to the Roles API always involve a trip to the role store.
Even if roles are not cached in a cookie, calling the principal object's
method is usually more efficient because when it is called for the first time during
a request it caches the results. The Roles API, on the other hand, does not perform
any caching. Because the
RowCreated event is fired once for every row in the GridView,
User.IsInRole(roleName) involves just one trip to the role store whereas
Roles.IsUserInRole(roleName) requires N trips, where N is the
number of user accounts displayed in the grid.
The Edit button's
Visible property is set to
True if the user visiting this
page is in the Administrators or Supervisors role; otherwise it is set to
The Delete button's
Visible property is set to
True only if the user is in
the Administrators role.
Test this page through a browser. If you visit the page as an anonymous visitor or as a user that is neither a Supervisor nor an Administrator, the CommandField is empty; it still exists, but as a thin sliver without the Edit or Delete buttons.
Note: It is possible to hide the CommandField altogether when a non-Supervisor and non-Administrator is visiting the page. I leave this as an exercise for the reader.
If a user that belongs to the Supervisors role (but not to the Administrators role) visits, he sees only the Edit button.
And if an Administrator visits, she has access to both the Edit and Delete buttons.
Step 3: Applying Role-Based Authorization Rules to Classes and Methods
In Step 2 we limited edit capabilities to users in the Supervisors and Administrators roles and delete capabilities to Administrators only. This was accomplished by hiding the associated user interface elements for unauthorized users through programmatic techniques. Such measures do not guarantee that an unauthorized user will be unable to perform a privileged action. There may be user interface elements that are added later or that we forgot to hide for unauthorized users. Or a hacker may discover some other way to get the ASP.NET page to execute the desired method.
An easy way to ensure that a particular piece of functionality cannot be accessed
by an unauthorized user is to decorate that class or method with the
PrincipalPermission attribute. When the .NET runtime uses a class or executes
one of its methods, it checks to ensure that the current security context has permission.
PrincipalPermission attribute provides a mechanism through which we can define
these rules.
We looked at using the
PrincipalPermission attribute back in the User-Based Authorization tutorial. Specifically, we
saw how to decorate the GridView's
SelectedIndexChanged and
RowDeleting event
handler so that they could only be executed by authenticated users and Tito, respectively.
PrincipalPermission attribute works just as well with roles.
Let's demonstrate using the
PrincipalPermission attribute on the GridView's
RowUpdating and
RowDeleting event handlers to prohibit execution for non-authorized
users. All we need to do is add the appropriate attribute atop each function definition:
<PrincipalPermission(SecurityAction.Demand, Role:="Administrators")>_
<PrincipalPermission(SecurityAction.Demand, Role:="Supervisors")>_
Protected Sub UserGrid_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles UserGrid.RowUpdating
End Sub
<PrincipalPermission(SecurityAction.Demand, Role:="Administrators")>_
Protected Sub UserGrid_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles UserGrid.RowDeleting
End Sub
The attribute for the
RowUpdating event handler dictates that only users in the
Administrators or Supervisors roles can execute the event handler, where as the
attribute on the
RowDeleting event handler limits the execution to users in the
Administrators role.
Note: The
PrincipalPermission attribute is represented as a class in the
namespace. Be sure to add a
Imports System.Security.Permissions statement at the
top of your code-behind class file to import this namespace.
If, somehow, a non-Administrator attempts to execute the
RowDeleting event handler
or if a non-Supervisor or non-Administrator attempts to execute the
event handler, the .NET runtime will raise a
In addition to ASP.NET pages, many applications also have an architecture that includes
various layers, such as Business Logic and Data Access Layers. These layers are
typically implemented as Class Libraries and offer classes and methods for performing
business logic- and data-related functionality. The
PrincipalPermission attribute
is useful for applying authorization rules to these layers as well.
For more information on using the
PrincipalPermission attribute to define authorization
rules on classes and methods, refer to Scott
Guthrie's blog entry
Adding Authorization Rules to Business and Data Layers Using
In this tutorial we looked at how to specify coarse and fine grain authorization rules based on the user's roles. ASP.NET's URL authorization feature allows a page developer to specify what identities are allowed or denied access to what pages. As we saw back in the User-Based Authorization tutorial, URL authorization rules can be applied on a user-by-user basis. They can also be applied on a role-by-role basis, as we saw in Step 1 of this tutorial.
Fine grain authorization rules may be applied declaratively or programmatically. In Step 2 we looked at using the LoginView control's RoleGroups feature to render different output based on the visiting user's roles. We also looked at ways to programmatically determine if a user belongs to a specific role and how to adjust the page's functionality accordingly.
Happy Programming!
Further Reading
For more information on the topics discussed in this tutorial, refer to the following resources:
Adding Authorization Rules to Business and Data Layers Using
- Examining ASP.NET 2.0's Membership, Roles, and Profile: Working with Roles
- Security Question List for ASP.NET 2.0
- Technical documentation
for the
About the Author
Scott Mitchell, author of multiple ASP/ASP.NET books and founder of 4GuysFromRolla.com, has been working with Microsoft Web technologies since 1998. Scott works as an independent consultant, trainer, and writer. His latest book is Sams Teach Yourself ASP.NET 2.0 in 24 Hours. Scott can be reached at firstname.lastname@example.com or via his blog at http://ScottOnWriting.NET.
Special Thanks To…
This tutorial series was reviewed by many helpful reviewers. Lead reviewers for this tutorial include Suchi Banerjee and Teresa Murphy. Interested in reviewing my upcoming MSDN articles? If so, drop me a line at email@example.com
This article was originally created on March 24, 2008

subset: commoncrawl


text:
Your Cart Is Empty!
EZ care Orchid plant that smells like Chocolate ,, no its not a hoax ,its for real. Makes a great gift for anybody. We deliver in Orchid pot with care instructions !
Write Your Own Review
Education on how to get products in the site.
Custom Tab Content 2
Custom Variants and Options let you create product customization options and fields quickly and easily. Any product can have custom variants and options � this can be configured in its product configuration. Custom variants and options can be created for products as required or non-required options. They can affect the total price of the product by a fixed amount or percentage.
In other words, custom variants and options allow you to make products that are unique and individualized. Whether it�s a gift with a special message, a sweatshirt with custom embroidered text, or anything in between � possibilities are limitless.


text:
Does More Money Produce Better Academic Scores?
If you're like most Americans, you've bought into the idea that education must be complicated and expensive to be worthwhile. It must be handled by highly educated, well-trained, pragmatic individuals with lots of mass produced educational tools at their disposal. Well, the truth may surprise you.
Recent findings in the Homeschool Progress Report 2009 found that education has little to do with the amount of money spent. When compared with the average amount spend per child in our public schools, homeschool families are doing an admirable job. We are, in fact, a frugal bunch. Most of us have traded the financial comfort of a two income family in order to have at least one parent (a.k.a. educator) at home, at least part of the time. Some of us are armed with little more than pen, paper, a library card and our creativity to develop our children's curriculum. And we like it that way! Just take a look at what the statistics say… they speak for themselves.
Comments are closed
- Comment Feed for this Post
- How to Teach Homeschoolers about the Election Process
- What Americans Really Believe about Religion
- How Much Screen Time Should Children Have?
- Canadian Study Supports Homeschooling's Benefits
- College Cost and Debt
- 10 Good Reasons to Homeschool, Part 2
- 10 Good Reasons to Homeschool, Part 1
- Why Families Homeschool?
- Preparing for the STEM Future
- How Important is Playtime?


text:
Commencement Set for May 18 at Penn State York
Penn State York will celebrate its 37th annual spring commencement at 6 p.m. Friday, May 18, in the Pullo Family Performing Arts Center at the campus. William J. Althaus, former mayor of the City of York and an international consultant on democracy and local government, is the commencement speaker. The campus will award associate and baccalaureate degrees and recognize master's degree graduates during the program. The ceremony is free and open to the public.
Althaus is an international consultant on democracy and local government specializing on development assistance to emerging democracies in Eastern Europe. He has most recently served as director of the Decentralization Project of the United States Agency for International Development in the Republic of Macedonia. He has led official delegations to Taiwan, Japan, Israel, France, the Council of Europe, and the Dominican Republic. He also managed delegations in the United States from El Salvador, Panama, Poland, and Albania.
Althaus was born in York, Pennsylvania, and holds a baccalaureate degree from Johns Hopkins University and received his Juris Doctor degree from the Dickinson School of Law. From 1976 to 1981, Althaus practiced civil law in York.
In 1981 he was elected mayor of the City of York, the youngest mayor ever elected in York. He was reelected in 1985 and 1989. When he chose not to seek a fourth term, he was the longest-serving mayor in the City's history.
In 1990, as mayor, Althaus negotiated and lobbied successfully for City Council approval for the donation of Rotary Woods to Penn State York, creating a clean, green space for the Penn State community and all citizens of York to enjoy. Thanks to his efforts and the 33-acre donation, the campus increased in size to more than 50 acres and is the home of the Pullo Family Performing Arts Center, Lee R. Glatfelter Library, and the Penn State Woods.
Althaus served as president of the Pennsylvania League of Cities and has been a member of the Advisory Boards to: the United States Trade Representative, the National Organization on Disabilities, the State and Local Legal Center, the Johns Hopkins University Institute for Policy Studies, the Albanian-American Trade Association and the US Council for Puerto Rico Statehood, and was a founding trustee of the Inter-American Cities Foundation. He served two terms as a presidential appointee to the Advisory Council on Historic Preservation.
In 1992, Althaus was elected president of the United States Conference of Mayors, the non-partisan leadership organization of the mayors of America's principal cities. He was responsible for guiding policy development and was the spokesman for the major cities of the United States. During his tenure as mayor he met frequently with and advised Presidents Reagan, George H.W. Bush, and Bill Clinton on urban issues.
From 2001 until April 2007 Mayor Althaus resided in the Republic of Macedonia and worked on democracy and governance issues throughout the region. In May 2007 he returned to York and continues his work with Development Alternatives, Inc. of Bethesda, Maryland.
In addition to hearing from Althaus, Penn State York will continue its tradition of the open microphone where graduates can speak for a moment. The top associate degree, baccalaureate, and master's degree graduates will also say a few words. A number of former Penn State York students who completed their degree work at an upper-division campus of Penn State will return to their home campus, York, to receive their degrees during the ceremony.
A reception, sponsored by the Penn State York Alumni Society, will follow the ceremony in the John T. and Paige S. Smith Atrium and mezzanine areas of the Pullo Center.


text:
For the first time, Hoboken streets will be lathered with brine, a liquid solution of salt and water, before a snowstorm instead of salt, afterward.
In a benefit hosted by Hoboken businessman Rory Chadwick on Friday, more than 75 members of the Hoboken community many of whom did not know the four women displaced by the swift-moving three-alarm blaze that gutted a two-story structure at Jackson and First streets donated money and household items to help the women put their lives back on track.
Motorists might want to check airbags and brakes before venturing to the Walmart at 88th Street and Tonnelle Avenue.


text:
Here at Anatory Software we believe in expanding our understanding of software and entertainment merely by experimentation, hence our motto "solving unneeded problems." Generating or finding problems to solve simply for the sake of experience and knowledge, with a byproduct of something fun or useful.
We have generated our fair share of software, and only plan to expand. You can check out our currently released products using the links on the left.


text:
Complete solutions for identifying and personalizing badges and plastic cards:
Meet Evolis at GITEX, on booth, D4-33 Hall 4, in Dubaï !
Come and discover the LAMINATOR showcased for the first time at Gitex tradeshow!
The global conference and trade show for the attractions industry, Orlando, USA, Booth#3281
Join our mailing list and stay up-to-date on new offers, sales and promotions :


text: The staff of Vidya Counto, M.D. and Libre Johnson, M.D. from the Columbiana Family Care Center donated gifts to the residents of Columbiana's Whispering Pines Village in lieu of the practice's annual staff gift exchange. Pictured are, from left, Marilyn Prudner, CFCC; Sandy Havlin, Whispering Pines staff; Lori Kavanaugh, CFCC; Doris Grossen, Whispering Pines resident; and Tina Coleman, CFCC. (Submitted photo)


text:
Media sources from across the globe have mourned the deaths of six women in Guatemala City this week, including two girls, ages six and twelve. Hundreds of women are murdered each year in Guatemala, however, it has taken a tragedy of this scope for the media to condemn the governments lack of action in passing and enforcing existing laws to protect women. Amnesty International highlights the story of Claudina Velazquez, age 19, who was murdered 10 years ago and whose killers were never found. Her case is just one example of the hundreds of cases every year that go uninvestigated.
In more positive news, the national minimum wage increased by five percent for many workers this month. However, minimum wage still covers less than 50 percent of basic necessities in Guatemala, worsening the circle of poverty and malnutrition for children and families.
While violence is ongoing, President Perez tells the Guardian that Guatemala and its neighbors are the real victims caught in between drug traffickers and the so-called War of Drugs, imploring the US to consider new strategies to combat the cartels.
Al Jazeera has an interesting overview of the progress made on key social and political issues, including drugs, violence, and impunity, in the year since Perez took office.


text:
By Emily Le Coz/NEMS Daily Journal
TUPELO – The city will create a task force to study the extent of its homeless population and recommend strategies to best remedy the situation.
Mayor Jack Reed Jr. announced earlier this week his efforts to assemble a group charged with the mission. It's still unclear when the task force will form, how many members it will have or in what capacity they'll serve.
But the decision to create it came at the behest of Ward 3 Councilman Jim Newell, who said Tupelo must actively engage in the fight against homelessness. Although existing agencies like The Salvation Army feed, shelter and provide other services to this group, Newell said gaps remain.
"Our immediate goal is to provide extended shelter, especially during extreme cold and extreme heat," he said. "We also need shelter for families" so mothers and children can lodge together.
The Salvation Army has 14 beds for men and six for women, but only a small family area. In extreme weather conditions, the facility will open its gym and let people sleep there.
Others homeless residents sleep under bridges, in drainage ditches, in wooded areas and near churches.
Their true numbers aren't known, but the Rev. Paul Stephens, rector of All Saints' Episcopal Church, said he thinks the population is growing.
"I base that on the number of people who are coming through our Saints' Brew feeding program in the morning," he said. "We continue to see more and more people coming through our doors."
Stephens said he's pleased with the city's commitment to get involved and hopes a task force can quantify Tupelo's homeless population, as well as coordinate existing efforts.
Some council members want to do even more. Newell and Ward 4 Councilwoman Nettie Davis support a proposal to turn the old Hunter-Saddler building into a full-service shelter with family quarters, educational programs and counseling.
The city owns the vacant property, located at the corner of South Green Street and Crossover Drive. It had planned to sell it to the highest bidder but postponed the sale while mulling the shelter idea.
Contact Emily Le Coz at (662) 678-1588 or email@example.com.


text: Tibet Rough Guides Snapshot China GBP EUR USD EBOOK $2.99 EPUB and MOBI Buy Ebook This item is already in your basket About ebook formats The Rough Guide Snapshot to Tibet is the ultimate travel guide to this fascinating region. It guides you through Tibet with reliable information and comprehensive coverage of all the sights and attractions, from the Jokhang, the holiest temple of Tibetan Buddhism, to the beautiful Namtso Lake and from the Friendship Highway to the walled town of Samye. Includes detailed maps and up-to-date listings plus all the information you need on arranging tours, entry permits and getting around. Also included is the Basics section from The Rough Guide to China, with all the practical information you need for travelling in China, including transport, food, drink, costs, health, entry requirements and personal safety. Also published as part of The Rough Guide to China. Full coverage: Lhasa, Samye, Tsetang, Tsurphu, Namtso, Gyantse, Shigatse, the Friendship Highway, Sakya, Mount Everest Base Camp, Mount Kailash (Equivalent printed page extent 100 pages). Authors David Leffman, Mark South, Martin Zatko, Simon Lewis Format Ebook (Watermarked) More info Published May 2012 Series Snapshots More Products Asia | China | Tibet


text:
Can John Malkovich ever be taken seriously again?
In Beyond the Clouds - filmed by aging art-house god Michelangelo Antonioni well before Being John Malkovich saw the light of day, but only now getting a theatrical run - the actor, wrapped in a Third Man trenchcoat and an aura of brooding ennui, ambles about issuing ponderous declarations and hitting on the babes. It is hard not to think, watching him, that John Cusack or Cameron Diaz isn't squirreling around inside Malkovich's noggin; it is difficult to separate the pursed-lipped thespian of Spike Jonze's surreal gem from the pursed-lipped fellow staring off into the clouds, or the sea, or the Armani boutique where comely Sophie Marceau is folding sweaters, in Antonioni's impossible folly.


text:
3 posts tagged with school by parmanparman.
Displaying 1 through 3 of 3.
Four year loyalty vs. seven year's work?
RelationsFilter: If you are a master's or doctoral graduate, what are some of the reasons you joined or chose not to join the alumni association of your graduate school? [more inside]
Counterfeit careers!
I love counterfeiting. Especially counterfeit toys and clothes, cars and other crazy items! I LOVE counterfeiting. I want to explore the possibility of a career in intellectual property law or other careers that have to do with counterfeiting (like: becoming a counterfeiter!) [more inside]
Not just a rhetorical question
Where do I find a ranking of graduate programs in communications arts and sciences in the United States? [more inside]
Page: 1


text:
Description & Highlights
Grand Cru Petite Sirah 10 Lt
Grand Cru Petite Sirah 10 Lt 4368 ingredient kit produces a dark red wine with hints of plum. It's high tannins let it age with grace. Perfect for red meats and savory dishes or with your favorite dark chocolates.
Old World character:Gains in stature with further aging, but delicious shortly after bottling.
Ideal blend of flavors:Quality ingredients are sourced from around the world.
Versatile blend:Complements a variety of foods and events.
- Model: 4368Grand Cru Petite Sirah 10 Lt
- Brand: BSGGrape skins included? No
- Wine type: RedConcentrate included? 10 L
- Oak intensity: 3 (Full bodied - medium)Yield: 6 gallons
- Body: 3 (Full bodied - medium)Fermentation time: 4 weeks
- Sweetness: 0 (Dry)


text:
I actually don't have a most annoying thing, but if I had to pick one, I guess it would just be learning how to cook meat. As a long time vegan, meat kind of freaks me out and I'm always worried about spreading bad bacteria or germs!
As for gadgets, I could go on for DAYS about them. I'm a total foodie, so we have lots of stuff in our kitchen. I also used to work at the corporate offices of Williams Sonoma, so I got 40% off.
Let's see, things I wouldn't want to live without:
-Vitamix (I use this daily to make my own salad dressings)
-Grill Pans
-Mini kitchenaid food processor (I also have a 12 cup one, and find that I never use it except when I want to shred cabbage)
-Excalibur Dehydrator (I dry my own fruits to make herbal teas)
-Vollrath nonstick pans... seriously, these are the best nonstick pans I've ever used (you can find them at restaurant supply stores)
-good basics like a veggie peeler, a microplane, silicone spatulas
-good knives are totally essential. I have and love the Wusthof Classic series.
-my grill.. we are not fortunate enough to have a gas stove, so our grill gets used almost daily
There's tons more, but those are the first things that come to mind.


text:
E Cigarette Ban in New York
On April 21th, the New York State Assembly unanimously voted on a bill — A9529 — to ban e-cigarettes after reviewing an article published by Action on Smoking and Health (ASH). Unlike other states who banned e-cigarettes in non-smoking areas, this bill will not only prohibit selling electronic cigarettes to minors, it will ban all smoking products "containing or delivering nicotine" that have not been approved by the FDA as a product to promote cessession or reduction of tobacco addiction, although the bill also reference removing herbal cigarettes from display. In essence, this bill will not just prohibit sales to minors, it will also affect adult smokers by creating a blanket ban on all e-cigarette sales in the state of New York, which could prompt other states to pass similar legislation.
The bill is now being reviewed by the Senate Health Committee, after which it will be passed to the senate for a final vote. The bill states that once passed, the law would become immediately effective and impose a civil penalty "in an amount not to exceed ten thousand dollars for each violation" for merchants and internet distributors selling e-cigarettes, regardless of their country of origin. Comments concerning this bill can be directed to Thomas K. Duance, Chair of the New York Health Committee, by calling 518-455-2451, faxing a statement to 518-426-6846 or sending an email to email@example.com.
Image: Maggie Smith / FreeDigitalPhotos.net
19 Comments/Reviews
What in God's name is wrong with these politicians??? E-cigarettes strip away EVERYTHING from the smoking experience except nicotine which is just one of THOUSANDS of toxic chemicals found in tobacco cigarettes. There's ZERO 2nd-hand smoke and the exhaled vapor contains only a tiny tiny amount of nicotine that wasn't absorbed by the user's lungs…certainly not enough to hurt anyone and CERTAINLY not enough to addict someone…my God. The patch DOESN'T WORK, nicotine gum DOESN'T WORK. The FDA study last year was a complete sham…they're in bed with Big Tobacco, Big Pharma and big taxes…period. E-cigarettes are a GOOD thing and New York's efforts are destroying what I know from personal experience to be the SAVING GRACE from something that has plagued my family and our entire species for decades. WAKE UP!!!!! Get on board!
Yah, I really don't get it!!! I hope they will stop this ridiculous law.
My friends, its all about the mighty dollar..loss of cigarette sales where good old NY has the highest sales tax or at least one of them..Good Ole Barack has even put the kabosh on internet sales of cigarettes what does that tell ya?
come on people, its not about the product, its about no tax money being collected and the medical bills being generated by smoking, think of this, no smoking related cancer, a huge amount of money is lost across the board, from taxes to jobs ! its not about the product its about revenue loss !!!
This is complete crap. This is probably the best thing introduced into the market for aiding american's in their attempts to quit smoking. Yeah it may still have nicotine, but research proves nicotine has nearly no affects on the body other then the addictions the give you. Some one should start a petition against banning the e cig's,im 100% down to suport these things the entire way.
I've been smoking for over 20 years and have owned a e cigarette for 2 weeks now.Since the e cig I have not had a real smoke,why ban something so good and helpful to help smokers quit or replace real cigs? I strongly feel the big cigarette companys are trying to stomp out the e cig business in fear that it may replace tobacco cigarettes.
says:Shelby Jansing
So, there are gonna ban E cigs, but they are going to keep producing cigarettes… Well this doesn't make any sense to me. This is absolutely retarded. Don't ban Cigarettes which causes thousands of deaths each year but continue banning Electronic cigarettes… I dont smoke but this is so retarded.
Can you say Tobacco Lobbyist, did you ever wonder why the electric car project was canceled by GM 90′s, cancer is treated with radiation, marijuana is illegal and cigarettes are legal, I am not allowed to produce my own gasoline or buy insurance from another state. Do the math and follow the money, Did you know Nestle's is pumping 90,000 gallons of water out of the Michigan Aquifer every minute, killing our great lakes so the cleanest water in the united states can be shipped away? None of this makes sense, unless you follow the money trail and see who is making the rules for whom.
One more thing, Fact: Bill S51 just passed the Senate in December 2010, Give huge unheard of power in the hands of the FDA, to protect us from our farmers – Sounds great, well guess who will be in charge of that arm of the FDA – ex CEO of Monsanto, one of the companies with the Most To Gain. The FDA will protect us from our farmers, using our money, but who will protect us from the FDA ?
I remember when Al Capone used to sell protection, at least he was honest about it, and demanded the money.
I live in NY and smoke electronic cigarettes. I have a feeling the e-cigs are putting a decent dent on the tax revenue made by the state on $10/pack in ny.
When Gov Cuomo is announcing large state worker layoffs, politicians who have union supporters would rather ban something that is a cheaper alternative to the $10/pack than to watch his/her voter base being laid off. One to look at is Gillibrand who if I can remember right as a lawyer defended big tobacco.
If the politicians don't see that banning the cheaper alternative and forcin folks who still have that nicotine addiction to pay an ungodly amount for cigarettes isn't going to hurt small business in Ny who could have benifitted from the extra cash in the hands of e cig smokers they are wrong.
This blue state is flushing itself down the crapper.
Can the proof be any more obvious! Politicians and Unions are the same -they will protect all taxes even if the e-cigarette reduces the health hazard of smoking real cigarettes.
Typical ineptness, they admitted theres not enough evidence to conclude they are harmful let alone more harmful than analog smokes. bottom line is, theres no money for them and thats it. freedom of the people to do as they please. as soon as they please themselves (the people) there will be someone else ,a nanny, busybody with nothing better to do , to strip it away with no cause, none- not to mention the formula has been changed to exclude propoglcycol like, forever ago—– on a slightly differant note, I believe the device itelf could be used to administer medicines via lung obsorbtion. but no/ " we dont understand it, so throw the baby out with the bathwater" —UNREAL!!!
says:Joe Person
Yep. Democracy and representing the people at work here.
Every forum I find bringing this topic up is flooded with an overwhelming number of people pissed off about such a law and people who've actually cut down or altogether QUIT smoking since using these, but there goes our great government looking to completely bypass popular opinion and the health benefits to keep a cash cow intact at the people's expense.
or ignore the law (if it's passed), go to another state to buy it (like Connecticut or NJ), and return home to smoke it in the privacy of your own home cause it doesn't cause any 2nd hand harm (or even primary for that matter). It just humidifies the air……….
or even the bathroom of the business-place you work at because it doesn't produce any odors.
How can they ban something that has not proven to be a hazard, but sell regular cigarettes noing how bad they are just to collect taxes and kill people, wel I guess they havent found a way to tax these so they will just ban them and kill everyone with regular cigs
says:Kat Hazlett
Was born in New York, raised in New York. I'm very greatful I no longer live in New York!
This absolutely ridiculous! How in the world can you ban something that helps smokers stop smoking and is 1000 times healthier for you than real cigs, but still not ban real cigs themselves? It just proves to everyone in the world that politicians here are about nothing more than money. I bought a Blu ecig and haven't pick up a real cig since. Now how is that "bad" for me or anyone else besides the government's wallets? They're just mad because ecigs don't have tobacco in them and there is nothing for them to tax as much as they tax real cigs. F'ing lousy, no-good, P.O.S., money hungry politicians. This country is going down the drain faster than Jimmy Johnson at Talladega.


text:
on May 13, 2013 - 3:14 PM
The preliminary hearing for the 45-year-old man accused of murdering his mother about 10 days ago in West Seneca was adjourned today until June 7, but it's unclear whether that hearing will be held.
With all parties present, the hearing for Primitivo Cruz was adjourned in front of West Seneca Town Justice Jeffrey M. Harrington.
Law-enforcement officials have speculated that an indictment could be obtained from an Erie County grand jury. That action would move the case into Erie County Court.
Cruz was charged with second-degree murder after he turned himself in to West Seneca police on May 7. He's accused of killing his 77-year-old mother, Carol Quinn, the previous weekend.


text: CCTV & Security Products > Access Control > Access Control Request To Exit Buttons Request To Exit Button Product# ACRE-EB01 Price Match Guarantee Price $66.96 Description Videos Accessories The IDTECK EB10 Request To Exit Button when connected properly to an access control board will release the Mag Lock or Electronic Door Strike on the exiting side of the door. 38W x 80H x 38D (mm) Unboxing Video of the ACRE-EB10 - Request to Exit Button This is an unboxing video of the ACRE-EB10 request to exit button from IDTECK. Learn the Basics of Access Control in this Video This is a video demonstrating the basics of Access Control. If you would like to learn more, feel free to contact us. Customer Reviews


text:
JEFFERSON COUNTY, Colo. — The woman whose body was found at the windy Saddle Trailhead on Lookout Mountain last week has been identified as Sandra Mercado, the Jefferson County Sheriff's Office announced Monday.
Mercado, 38, was found stabbed Thursday morning by a hiker. Investigators spent nearly 24 hours processing the scene before reopening it to the public. They determined the case to be a homicide.
Mercado also is known as Sandra Walker (birth name) and Sandra Meza (previous married name). Investigators say she lived and worked in Aurora.
Anyone with information about Mercado or the case is asked to call the Jefferson County Sheriff's Office at 303-271-5612 or Crimestoppers at 720-913-7867.


text:
Bob Keeshan, 76, who entertained generations of children as the mustachioed star of "Captain Kangaroo," died Friday morning in Vermont after a long illness, a family friend tells CNN.
"Captain Kangaroo" debuted in 1955 and ran for 30 years on CBS before moving to public television, where it played alongside the likes of "Sesame Street" and "Mister Rogers" for six more years. The show won six Emmy Awards, three Gabriels and three Peabodies.
Captain Kangaroo -- so named for the kangaroo-like pouches in the pockets of the coat he always wore -- would wander through his Treasure House each day on the program, chatting with characters such as Mr. Green Jeans (played by Hugh "Lumpy" Brannum) and visiting with puppet animals like Bunny Rabbit and Mr. Moose.
When Keeshan first took the role, he was playing a character much older than he was. "I was impressed with the potential positive relationship between grandparents and grandchildren, so I chose an elderly character," he said, according to Reuters.
Keeshan was born in Lynbrook, Long Island, on June 27, 1927, and he served in the U.S. Marine Corp reserves before getting into broadcasting -- first working as a page at NBC, according to IMDB. He went on to portray Clarabell the Clown on the "Howdy Doody" show as well as hosting, emceeing and developing an number of other afternoon shows before launching "Kangaroo" in 1955.
He also was an author, publishing "Growing Up Happy" in 1989 and then "Good Morning Captain: 50 Wondering Years with Bob Keeshan, TV's Captain Kangaroo" in 1996. He also authored the "Itty Bitty Kitty" children's book series.
He was widowed in the late '90s and lived in New England.
'Captain Kangaroo,' Bob Keeshan, Dies


text:
shoppers recently viewed this!
Crystal PixelModa Watch
- Color:
- pink/blue
- Size :
- medium
Please select an available size.
Please select a size.
Qty: 1
- 1
- 2
Description: A product of countless stylistic experimentation, in which cutting edge materials were paired with the latest production techniques and assigned to a rainbow of handpicked colors.
- Digital face surrounded by crystal embellishment
- Water resistant silicone quartz style
- Lifetime warranty provided by PIXELmoda; contact PIXELmoda for details
- Size S= 15cm, Size M=16 cm, Size L= 17cm
- Ages: 7 & up
Material: Silicone
Brand: PixelModa
Origin: Imported


text:
Romantic Hotels in Singapore
Singapore's diverse island metropolis yields upscale adventure for two. Chinatown's lively streets house attractions ranging from the Heritage Center to the intricately carved Sri Mariamman, Singapore's oldest Hindu temple. In the metropolitan Riverside District, couples can enjoy panoramic city views in the 1-Altitude Gallery, atop Singapore's tallest skyscraper. Museums and monuments abound in the historic Bras Basah area, including the Singapore Art Museum. This area also houses Istana, the residence of the president of Singapore. The palace's many gardens and ponds are perfect for a romantic stroll. Singapore boasts abundant green space in spite of its population density. Parks range from the renowned Botanical Gardens to secluded forest. The Southern Ridges Walk winds through thick jungle and offers ocean views. Alternatively, visitors can marvel at myriad tropical species at the popular Jurong Bird Park and the adjacent Singapore Zoo, which offers a unique Night Safari program.
Filter Romantic Hotels in Singapore
More Hotels in Singapore
Popular Searches:
Points of Interest:
- Changi International Airport - SIN
Check Singapore Hotel Deals:
Shangri-La Hotel
Pan Pacific Singapore
Raffles Hotel Singapore
Mandarin Oriental Singapore
Fairmont Singapore
The Scarlet Hotel
Fullerton Hotel Singapore
New Majestic Hotel
Swissotel The Stamford
Marina Mandarin at Marina Bay
- 1
- 2
- ...
- Next ›


text:
What's fueling your teen? Fast food is a quick fix, but too much of a poor diet can lead to health concerns. Join us for a one-hour presentation on teen nutrition and help your teen select healthier foods options, understand portion control, essential nutrients for sports nutrition and learn signs of eating disorders. Plus, get ideas on how to maintain a healthy diet when your family is always on the go.
Saturday, October 5, 201310:00 am – 11:00 amBoys Town National Research Hospital14000 Hospital Road,on the Boys Town Campus(139th & Pacific Street)
Register Today


text:
Kourtney and Kim Take New York had its season premiere Sunday night and with all the bickering between the show's newlyweds, Kim Kardashian and Kris Humphries, it could have been called Kim and Kris Break Up. But whose behavior was worse?
Among the lowlights ...
Before they left, for New York, Kris said, "You're my wife now ... It's going to take a lot to get rid of me." Then he scooped her up and said, "God, you ate a lot of wedding cake."
Once they were settled into their New York apartment, Kris admits to intentionally leaving clothes around just to annoy Kim, who's a known neat freak.
Despite Kris's need to work out and keep up his basketball skills, Kim insisted on having him accompany her to a party, where she pressured him to walk the press line, pose for pictures on the red carpet and cut the cake. "You care about that. I don't give a f–––," Kris says.
When Kris discovered Kim and Kourtney did naked yoga with a male instructor, he got upset and they had a big fight in front of her friends. "How rude is it that there's a naked guy in my house when I walk home?" Kris shouted. Kim's response: "Kris, you don't treat people like that. I don't care how uncomfortable you are," she said. "You're so immature I can't take it."
In the end, Kris decided to leave and go to Minnesota to train. "I just can't get done what I need to get done in New York," he said, citing the cramped living situation and their other issues.
"We're gonna live separate?" she asks, "like a long-distance marriage?"
Kim Kardashian vs. Kris Humphries: Whose Behavior Was Worse?
Denise Truscello /WireImage


text:
• Diagnosis related groups (DRGs) have sharply decreased the amount of compensation hospitals can expect for providing trauma care. A total of 637 patients admitted for acute traumatic injuries between Oct 1, 1985, and July 30, 1986, had their DRG classifications, Injury Severity Scores, trauma scores, and ages compared with hospital charges in an attempt to identify factors that could be used to accurately predict hospital charges. The best prediction of charges was obtained when DRG assignment was combined with Injury Severity Scores and age. When the equation obtained by this approach was applied to a separate population of 301 patients, the average difference between the actual charge and that predicted was $38 and would have led to a 33-fold decrease In money lost by the hospital. Altering the DRG payment schedule as proposed would allow hospitals to be fairly compensated for the care of trauma patients.
(Arch Surg 1988;123:579-582)
Thank you for submitting a comment on this article. It will be reviewed by JAMA Surgery editors. You will be notified when your comment has been published. Comments should not exceed 500 words of text and 10 references.
Do not submit personal medical questions or information that could identify a specific patient, questions about a particular case, or general inquiries to an author. Only content that has not been published, posted, or submitted elsewhere should be submitted. By submitting this Comment, you and any coauthors transfer copyright to the journal if your Comment is posted.
* = Required Field
Disclosure of Any Conflicts of Interest*
Indicate all relevant conflicts of interest of each author below, including all relevant financial interests, activities, and relationships within the past 3 years including, but not limited to, employment, affiliation, grants or funding, consultancies, honoraria or payment, speakers' bureaus, stock ownership or options, expert testimony, royalties, donation of medical equipment, or patents planned, pending, or issued. If all authors have none, check "No potential conflicts or relevant financial interests" in the box below. Please also indicate any funding received in support of this work. The information will be posted with your response.
Some tools below are only available to our subscribers or users with an online account.
Download citation file:
Customize your page view by dragging & repositioning the boxes below.
More Listings atJAMACareerCenter.com >
Enter your username and email address. We'll send you a link to reset your password.
Enter your username and email address. We'll send instructions on how to reset your password to the email address we have on record.
Need assistance?
Athens and Shibboleth are access management services that provide single sign-on to protected resources. They replace the multiple user names and passwords necessary to access subscription-based content with a single user name and password that can be entered once per session. It operates independently of a user's location or IP address. If your institution uses Athens or Shibboleth authentication, please contact your site administrator to receive your user name and password.