Ignore:
Timestamp:
Nov 30, 2010, 2:10:42 PM (11 years ago)
Author:
robert@…
Message:

Implemented improved authorisation to give administrators all permissions (ticket #207)

Location:
trunk/grails-app/domain/dbnp
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/domain/dbnp/authentication/SecRole.groovy

    r1159 r1222  
    11package dbnp.authentication
    22
    3 class SecRole {
     3class SecRole implements Serializable {
    44
    55        String authority
  • trunk/grails-app/domain/dbnp/studycapturing/Study.groovy

    r1036 r1222  
    410410        }
    411411
     412                // Administrators are allowed to read every study
     413                if( loggedInUser.hasAdminRights() ) {
     414                        return true;
     415                }
     416
    412417        // Owners and writers are allowed to read this study
    413418        if( this.owner == loggedInUser || this.writers.contains(loggedInUser) ) {
     
    430435            return false;
    431436        }
     437
     438                // Administrators are allowed to write every study
     439                if( loggedInUser.hasAdminRights() ) {
     440                        return true;
     441                }
     442
    432443        return this.owner == loggedInUser || this.writers.contains(loggedInUser)
    433444    }
     
    443454    }
    444455
     456        /**
     457         * Returns a list of studies that are writable for the given user
     458         */
     459        public static giveWritableStudies(SecUser user, int max) {
     460                // User that are not logged in, are not allowed to write to a study
     461                if( user == null )
     462                        return [];
     463                       
     464                def c = Study.createCriteria()
     465
     466                // Administrators are allowed to read everything
     467                if( user.hasAdminRights() ) {
     468                        return c.list {
     469                                maxResults(max)
     470                        }
     471                }
     472
     473                return c.list {
     474                        maxResults(max)
     475                        or {
     476                                eq( "owner", user )
     477                                writers {
     478                                        eq( "id", user.id )
     479                                }
     480                        }
     481                }
     482        }
     483
     484        /**
     485         * Returns a list of studies that are readable by the given user
     486         */
     487        public static giveReadableStudies(SecUser user, int max) {
     488                def c = Study.createCriteria()
     489
     490        // Administrators are allowed to read everything
     491                if( user == null ) {
     492            return c.list {
     493                                maxResults(max)
     494                and {
     495                    eq( "published", true )
     496                    eq( "publicstudy", true )
     497                }
     498            }
     499        } else if( user.hasAdminRights() ) {
     500            return c.list {
     501                                maxResults(max)
     502                        }
     503                } else  {
     504            return c.list {
     505                                maxResults(max)
     506                or {
     507                    eq( "owner", user )
     508                    writers {
     509                        eq( "id", user.id )
     510                    }
     511                    and {
     512                        readers {
     513                            eq( "id", user.id )
     514                        }
     515                        eq( "published", true )
     516                    }
     517                }
     518            }
     519        }
     520        }
    445521}
Note: See TracChangeset for help on using the changeset viewer.