CSLA .NET

Vibrant discussion about CSLA .NET and using the framework to build great business applications.

CSLA 3.8.4 Authorization rules - Code Implementation Confirmation

rated by 0 users
Answered (Verified) This post has 1 verified answer | 2 Replies | 2 Followers

Top 150 Contributor
59 Posts
jamie.clayton posted on Thu, Mar 8 2012 1:53 AM

Just wanted to check my code is implemented correctly. I've found that if I don't create a method "AddObjectAuthorizationRules" any application menu logic that tests for permission will fail.

Me.ClientSearchToolStripMenuItem.Visible = _
Csla.Security.AuthorizationRules.CanGetObject(GetType(MyVIP.Library.Client))
   
#Region "Authorization Rules"
    
#If Not SILVERLIGHT Then
        ''' <summary>
        ''' Allows the specification of CSLA based authorization rules.  Specifies what roles can 
        ''' perform which operations for a given business object
        ''' </summary>
    	Private Shared Sub AddObjectAuthorizationRules()        
            ''More information on these rules can be found here (http://www.devx.com/codemag/Article/40663/1763/page/2).
    
            'Dim canWrite As String() = { "AdminUser", "RegularUser" }
            Dim canRead As String() = {"AdminUser""RegularUser""ReadOnlyUser"}
            'Dim admin As String() = { "AdminUser" }
    
            'AuthorizationRules.AllowCreate(GetType(Client), admin)
            'AuthorizationRules.AllowDelete(GetType(Client), admin)
            'AuthorizationRules.AllowEdit(GetType(Client), canWrite)
            AuthorizationRules.AllowGet(GetType(Client), canRead)
    	End Sub 
		
	Protected Overrides Sub AddAuthorizationRules()
            MyBase.AddAuthorizationRules()
            ''Identification
            'AuthorizationRules.AllowRead(_identificationProperty, canRead)
    
            ''Guid
            'AuthorizationRules.AllowWrite(_guidProperty, canWrite)
            'AuthorizationRules.AllowRead(_guidProperty, canRead)
    
            ''Address1
            'AuthorizationRules.AllowWrite(_address1Property, canWrite)
            'AuthorizationRules.AllowRead(_address1Property, canRead)
    
            ''Address2
            'AuthorizationRules.AllowWrite(_address2Property, canWrite)
            'AuthorizationRules.AllowRead(_address2Property, canRead)
    
            ''Suburb
            'AuthorizationRules.AllowWrite(_suburbProperty, canWrite)
            'AuthorizationRules.AllowRead(_suburbProperty, canRead)
    
            ''State
            'AuthorizationRules.AllowWrite(_stateProperty, canWrite)
            'AuthorizationRules.AllowRead(_stateProperty, canRead)
    
            ''PostCode
            'AuthorizationRules.AllowWrite(_postCodeProperty, canWrite)
            'AuthorizationRules.AllowRead(_postCodeProperty, canRead)
    
            ''Phone
            'AuthorizationRules.AllowWrite(_phoneProperty, canWrite)
            'AuthorizationRules.AllowRead(_phoneProperty, canRead)
    
            ''Fax
            'AuthorizationRules.AllowWrite(_faxProperty, canWrite)
            'AuthorizationRules.AllowRead(_faxProperty, canRead)
    
            ''Mobile
            'AuthorizationRules.AllowWrite(_mobileProperty, canWrite)
            'AuthorizationRules.AllowRead(_mobileProperty, canRead)
    
            ''Email
            'AuthorizationRules.AllowWrite(_emailProperty, canWrite)
            'AuthorizationRules.AllowRead(_emailProperty, canRead)
    
            ''ObsoletePassword
            'AuthorizationRules.AllowWrite(_obsoletePasswordProperty, canWrite)
            'AuthorizationRules.AllowRead(_obsoletePasswordProperty, canRead)
    
            ''LastUpdatedDate
            'AuthorizationRules.AllowWrite(_lastUpdatedDateProperty, canWrite)
            'AuthorizationRules.AllowRead(_lastUpdatedDateProperty, canRead)
    
            ''LastUpdatedByUserID
            'AuthorizationRules.AllowWrite(_lastUpdatedByUserIDProperty, canWrite)
            'AuthorizationRules.AllowRead(_lastUpdatedByUserIDProperty, canRead)
    
            ''IsInternational
            'AuthorizationRules.AllowWrite(_isInternationalProperty, canWrite)
            'AuthorizationRules.AllowRead(_isInternationalProperty, canRead)
    
            ''FullName
            'AuthorizationRules.AllowWrite(_fullNameProperty, canWrite)
            'AuthorizationRules.AllowRead(_fullNameProperty, canRead)

        End Sub
    
#End If

Protected Overrides Sub AddBusinessRules()             ' Call the base class, if this call isn't made than any declared System.ComponentModel.DataAnnotations rules will not work.             MyBase.AddBusinessRules()             If AddBusinessValidationRules() Then Exit Sub                  ValidationRules.AddRule(AddressOf Global.Csla.Validation.CommonRules.StringMaxLength, New CommonRules.MaxLengthRuleArgs(_address1Property, 100))             ValidationRules.AddRule(AddressOf Global.Csla.Validation.CommonRules.StringMaxLength, New CommonRules.MaxLengthRuleArgs(_address2Property, 100))             ValidationRules.AddRule(AddressOf Global.Csla.Validation.CommonRules.StringMaxLength, New CommonRules.MaxLengthRuleArgs(_suburbProperty, 50))             ValidationRules.AddRule(AddressOf Global.Csla.Validation.CommonRules.StringMaxLength, New CommonRules.MaxLengthRuleArgs(_stateProperty, 3))             ValidationRules.AddRule(AddressOf Global.Csla.Validation.CommonRules.StringMaxLength, New CommonRules.MaxLengthRuleArgs(_postCodeProperty, 12))             ValidationRules.AddRule(AddressOf Global.Csla.Validation.CommonRules.StringMaxLength, New CommonRules.MaxLengthRuleArgs(_phoneProperty, 50))             ValidationRules.AddRule(AddressOf Global.Csla.Validation.CommonRules.StringMaxLength, New CommonRules.MaxLengthRuleArgs(_faxProperty, 50))             ValidationRules.AddRule(AddressOf Global.Csla.Validation.CommonRules.StringMaxLength, New CommonRules.MaxLengthRuleArgs(_mobileProperty, 20))             ValidationRules.AddRule(AddressOf Global.Csla.Validation.CommonRules.StringMaxLength, New CommonRules.MaxLengthRuleArgs(_emailProperty, 100))         End Sub

Jamie Clayton
Senior Application Developer

Website: Jenasys Design - Australia
Blog: Practical CSLA

Answered (Verified) Verified Answer

Top 150 Contributor
59 Posts

Rocky,

It doesn't generate an error, I thought it was generating the wrong true/false result. After much *pie on face* I determined that the VS2010 debug environment is incorrectly returning the value for the Strip Menu Item Visible property. Looks like rollover variable declaration, debug window and Locals report the default value as "False" rather than the value I have configured. DOH!

Me.ClientSearchToolStripMenuItem.Visible

So CanGetObject returns the correct value. So the code in CodeSmith Generator is correct for AddAuthorizationRule and the issue I suggested is wrong.

Protected Overrides Sub AddAuthorizationRules()
     
            ''More information on these rules can be found here (http://www.devx.com/codemag/Article/40663/1763/page/2).
    
            'Dim canWrite As String() = { "AdminUser", "RegularUser" }
            Dim canRead As String() = {"AdminUser""RegularUser""ReadOnlyUser"}
            'Dim admin As String() = { "AdminUser" }
    
            'AuthorizationRules.AllowCreate(GetType(Client), admin)
            'AuthorizationRules.AllowDelete(GetType(Client), admin)
            'AuthorizationRules.AllowEdit(GetType(Client), canWrite)
            AuthorizationRules.AllowGet(GetType(Client), canRead)
    	
            ''Identification
            'AuthorizationRules.AllowRead(_identificationProperty, canRead)
    
            ''Guid
            'AuthorizationRules.AllowWrite(_guidProperty, canWrite)
            'AuthorizationRules.AllowRead(_guidProperty, canRead)

End Sub
Drags tail between legs....Thanks for the prompt to prove myself wrong...again.

Jamie Clayton
Senior Application Developer

Website: Jenasys Design - Australia
Blog: Practical CSLA

All Replies

Top 10 Contributor
9,270 Posts

How does it fail? Does CanGetObject throw an exception?

Rocky

Top 150 Contributor
59 Posts

Rocky,

It doesn't generate an error, I thought it was generating the wrong true/false result. After much *pie on face* I determined that the VS2010 debug environment is incorrectly returning the value for the Strip Menu Item Visible property. Looks like rollover variable declaration, debug window and Locals report the default value as "False" rather than the value I have configured. DOH!

Me.ClientSearchToolStripMenuItem.Visible

So CanGetObject returns the correct value. So the code in CodeSmith Generator is correct for AddAuthorizationRule and the issue I suggested is wrong.

Protected Overrides Sub AddAuthorizationRules()
     
            ''More information on these rules can be found here (http://www.devx.com/codemag/Article/40663/1763/page/2).
    
            'Dim canWrite As String() = { "AdminUser", "RegularUser" }
            Dim canRead As String() = {"AdminUser""RegularUser""ReadOnlyUser"}
            'Dim admin As String() = { "AdminUser" }
    
            'AuthorizationRules.AllowCreate(GetType(Client), admin)
            'AuthorizationRules.AllowDelete(GetType(Client), admin)
            'AuthorizationRules.AllowEdit(GetType(Client), canWrite)
            AuthorizationRules.AllowGet(GetType(Client), canRead)
    	
            ''Identification
            'AuthorizationRules.AllowRead(_identificationProperty, canRead)
    
            ''Guid
            'AuthorizationRules.AllowWrite(_guidProperty, canWrite)
            'AuthorizationRules.AllowRead(_guidProperty, canRead)

End Sub
Drags tail between legs....Thanks for the prompt to prove myself wrong...again.

Jamie Clayton
Senior Application Developer

Website: Jenasys Design - Australia
Blog: Practical CSLA

Page 1 of 1 (3 items) | RSS

Copyright (c) 2006-2010 Marimer LLC. All rights reserved.
Email admin@lhotka.net for support.
Powered by Community Server (Non-Commercial Edition), by Telligent Systems