001 //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/security/drm/SecurityRegistry.java $ 002 /*---------------- FILE HEADER ------------------------------------------ 003 004 This file is part of deegree. 005 Copyright (C) 2001-2008 by: 006 EXSE, Department of Geography, University of Bonn 007 http://www.giub.uni-bonn.de/deegree/ 008 lat/lon GmbH 009 http://www.lat-lon.de 010 011 This library is free software; you can redistribute it and/or 012 modify it under the terms of the GNU Lesser General Public 013 License as published by the Free Software Foundation; either 014 version 2.1 of the License, or (at your option) any later version. 015 016 This library is distributed in the hope that it will be useful, 017 but WITHOUT ANY WARRANTY; without even the implied warranty of 018 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 019 Lesser General Public License for more details. 020 021 You should have received a copy of the GNU Lesser General Public 022 License along with this library; if not, write to the Free Software 023 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 024 025 Contact: 026 027 Andreas Poth 028 lat/lon GmbH 029 Aennchenstr. 19 030 53115 Bonn 031 Germany 032 E-Mail: poth@lat-lon.de 033 034 Prof. Dr. Klaus Greve 035 Department of Geography 036 University of Bonn 037 Meckenheimer Allee 166 038 53115 Bonn 039 Germany 040 E-Mail: greve@giub.uni-bonn.de 041 042 ---------------------------------------------------------------------------*/ 043 package org.deegree.security.drm; 044 045 import java.util.Properties; 046 047 import org.deegree.security.GeneralSecurityException; 048 import org.deegree.security.drm.model.Group; 049 import org.deegree.security.drm.model.Privilege; 050 import org.deegree.security.drm.model.Right; 051 import org.deegree.security.drm.model.RightType; 052 import org.deegree.security.drm.model.Role; 053 import org.deegree.security.drm.model.SecurableObject; 054 import org.deegree.security.drm.model.SecuredObject; 055 import org.deegree.security.drm.model.User; 056 057 058 /** 059 * This is an interface for datastores that are able to stores the following 060 * object types and their relations: 061 * <ul> 062 * <li><code>User</code> 063 * <li><code>Group</code> 064 * <li><code>Role</code> 065 * <li><code>SecurableObject</code> 066 * <li><code>Right / RightType</code> 067 * <li><code>Privilege</code> 068 * </ul> 069 * 070 * @author <a href="mailto:mschneider@lat-lon.de">Markus Schneider </a> 071 * @version $Revision: 9346 $ 072 */ 073 public interface SecurityRegistry { 074 075 /** 076 * Initializes the <code>Registry</code> -instance according to the 077 * contents of the submitted <code>Properties</code>. 078 * <p> 079 * The supported keys and values depend on the concrete implementation. 080 * 081 * @param properties 082 * @throws GeneralSecurityException 083 */ 084 void initialize(Properties properties) throws GeneralSecurityException; 085 086 /** 087 * Signals the <code>Registry</code> that a new transaction starts. 088 * <p> 089 * Only one transaction can be active at a time. 090 * @param transaction 091 * 092 * @throws GeneralSecurityException 093 */ 094 void beginTransaction(SecurityTransaction transaction) throws GeneralSecurityException; 095 096 /** 097 * Signals the <code>Registry</code> that the current transaction ends. 098 * Changes made during the transaction are now made persistent. 099 * @param transaction 100 * 101 * @throws GeneralSecurityException 102 */ 103 void commitTransaction(SecurityTransaction transaction) throws GeneralSecurityException; 104 105 /** 106 * Signals the <code>Registry</code> that the transaction shall be 107 * aborted. Changes made by the transaction are undone. 108 * @param transaction 109 * 110 * @throws GeneralSecurityException 111 */ 112 void abortTransaction(SecurityTransaction transaction) throws GeneralSecurityException; 113 114 /** 115 * Deletes all data from the <code>Registry</code> and sets the default 116 * objects (SEC_ADMIN user, role and group) and standard rights and 117 * privileges. 118 * 119 * @param transaction 120 * @throws GeneralSecurityException 121 */ 122 void clean(SecurityTransaction transaction) throws GeneralSecurityException; 123 124 /** 125 * Adds a new User-account to the <code>Registry</code>. 126 * @param transaction 127 * @param name 128 * @param password 129 * @param lastName 130 * @param firstName 131 * @param mailAddress 132 * @return 133 * 134 * @throws GeneralSecurityException 135 * this is a <code>DuplicateException</code> if the group 136 * already existed 137 */ 138 User registerUser(SecurityTransaction transaction, String name, String password, 139 String lastName, String firstName, String mailAddress) 140 throws GeneralSecurityException; 141 142 /** 143 * Removes an existing <code>User<code> from the <code>Registry</code>. 144 * @param transaction 145 * @param user 146 * 147 * @throws GeneralSecurityException 148 */ 149 void deregisterUser(SecurityTransaction transaction, User user) 150 throws GeneralSecurityException; 151 152 /** 153 * Updates the metadata (name, email, etc.) of a <code>User</code> in the 154 * <code>Registry</code>. 155 * @param transaction 156 * @param user 157 * 158 * @throws GeneralSecurityException 159 * this is a <code>DuplicateException</code> if a user with the 160 * new name already existed 161 */ 162 void updateUser(SecurityTransaction transaction, User user) 163 throws GeneralSecurityException; 164 165 /** 166 * Retrieves a <code>User</code> from the <code>Registry</code>. 167 * @param securityAccess 168 * @param name 169 * @return 170 * 171 * @throws GeneralSecurityException 172 * this is an <code>UnknownException</code> if the user is not 173 * known to the <code>Registry</code> 174 */ 175 User getUserByName(SecurityAccess securityAccess, String name) 176 throws GeneralSecurityException; 177 178 /** 179 * Retrieves a <code>User</code> from the <code>Registry</code>. 180 * @param securityAccess 181 * @param id 182 * @return 183 * 184 * @throws GeneralSecurityException 185 * this is an <code>UnknownException</code> if the user is not 186 * known to the <code>Registry</code> 187 */ 188 User getUserById(SecurityAccess securityAccess, int id) 189 throws GeneralSecurityException; 190 191 /** 192 * Retrieves all <code>User</code> s from the <code>Registry</code>. 193 * @param securityAccess 194 * @return 195 * 196 * @throws GeneralSecurityException 197 */ 198 User[] getAllUsers(SecurityAccess securityAccess) 199 throws GeneralSecurityException; 200 201 /** 202 * Retrieves all <code>Users</code> s from the <code>Registry</code> 203 * that are associated DIRECTLY (SecurityAccess securityAccess, i.e. not via 204 * group memberships) with a given <code>Role</code>. 205 * @param securityAccess 206 * @param role 207 * @return 208 * 209 * @throws GeneralSecurityException 210 */ 211 User[] getUsersWithRole(SecurityAccess securityAccess, Role role) 212 throws GeneralSecurityException; 213 214 /** 215 * Retrieves all <code>User</code> s from the <code>Registry</code> 216 * belong to the given <code>Group</code>. 217 * @param securityAccess 218 * @param group 219 * @return 220 * 221 * @throws GeneralSecurityException 222 */ 223 User[] getUsersInGroup(SecurityAccess securityAccess, Group group) 224 throws GeneralSecurityException; 225 226 /** 227 * Sets the <code>User</code> s that are members of a given 228 * <code>Group</code>. 229 * @param transaction 230 * @param group 231 * @param users 232 * 233 * @throws GeneralSecurityException 234 */ 235 void setUsersInGroup(SecurityTransaction transaction, Group group, 236 User[] users) throws GeneralSecurityException; 237 238 /** 239 * Sets the <code>User</code> s that a given <code>Role</code> is 240 * associated to. 241 * @param transaction 242 * @param role 243 * @param users 244 * 245 * @throws GeneralSecurityException 246 */ 247 void setUsersWithRole(SecurityTransaction transaction, Role role, 248 User[] users) throws GeneralSecurityException; 249 250 /** 251 * Adds a new Group-account to the <code>Registry</code>. 252 * @param transaction 253 * @param name 254 * @param title 255 * @return 256 * 257 * @throws GeneralSecurityException 258 * this is a <code>DuplicateException</code> if the group 259 * already existed 260 */ 261 Group registerGroup(SecurityTransaction transaction, String name, 262 String title) throws GeneralSecurityException; 263 264 /** 265 * Removes an existing <code>Group</code> from the <code>Registry</code> 266 * (including its relations). 267 * @param transaction 268 * @param group 269 * 270 * @throws GeneralSecurityException 271 */ 272 void deregisterGroup(SecurityTransaction transaction, Group group) 273 throws GeneralSecurityException; 274 275 /** 276 * Retrieves a <code>Group</code> from the <code>Registry</code>. 277 * @param securityAccess 278 * @param name 279 * @return 280 * 281 * @throws GeneralSecurityException 282 * this is an <code>UnknownException</code> if the group is 283 * not known to the <code>Registry</code> 284 */ 285 Group getGroupByName(SecurityAccess securityAccess, String name) 286 throws GeneralSecurityException; 287 288 /** 289 * Retrieves a <code>Group</code> from the <code>Registry</code>. 290 * @param securityAccess 291 * @param id 292 * @return 293 * 294 * @throws GeneralSecurityException 295 * this is an <code>UnknownException</code> if the group is 296 * not known to the <code>Registry</code> 297 */ 298 Group getGroupById(SecurityAccess securityAccess, int id) 299 throws GeneralSecurityException; 300 301 /** 302 * Retrieves all <code>Group</code> s from the <code>Registry</code>. 303 * @param securityAccess 304 * @return 305 * 306 * @throws GeneralSecurityException 307 */ 308 Group[] getAllGroups(SecurityAccess securityAccess) 309 throws GeneralSecurityException; 310 311 /** 312 * Retrieves all <code>Group</code> s from the <code>Registry</code> 313 * that the given <code>User</code> belongs to. 314 * @param securityAccess 315 * @param user 316 * @return 317 * 318 * @throws GeneralSecurityException 319 */ 320 Group[] getGroupsForUser(SecurityAccess securityAccess, User user) 321 throws GeneralSecurityException; 322 323 /** 324 * Retrieves all <code>Group</code> s from the <code>Registry</code> 325 * that the given <code>Group</code> belongs to. 326 * @param securityAccess 327 * @param group 328 * @return 329 * 330 * @throws GeneralSecurityException 331 */ 332 Group[] getGroupsForGroup(SecurityAccess securityAccess, Group group) 333 throws GeneralSecurityException; 334 335 /** 336 * Retrieves all <code>Group</code> s from the <code>Registry</code> 337 * belong to the given <code>Group</code>. 338 * @param securityAccess 339 * @param group 340 * @return 341 * 342 * @throws GeneralSecurityException 343 */ 344 Group[] getGroupsInGroup(SecurityAccess securityAccess, Group group) 345 throws GeneralSecurityException; 346 347 /** 348 * Retrieves all <code>Group</code> s from the <code>Registry</code> 349 * that are associated with a given <code>Role</code>. 350 * @param securityAccess 351 * @param role 352 * @return 353 * 354 * @throws GeneralSecurityException 355 */ 356 Group[] getGroupsWithRole(SecurityAccess securityAccess, Role role) 357 throws GeneralSecurityException; 358 359 /** 360 * Sets the <code>Group</code> s that a given <code>User</code> is a 361 * DIRECT member of. 362 * @param transaction 363 * @param user 364 * @param groups 365 * 366 * @throws GeneralSecurityException 367 */ 368 void setGroupsForUser(SecurityTransaction transaction, User user, 369 Group[] groups) throws GeneralSecurityException; 370 371 /** 372 * Sets the <code>Groups</code> s that are members of a given 373 * <code>Group</code>. 374 * @param transaction 375 * @param group 376 * @param groups 377 * 378 * @throws GeneralSecurityException 379 */ 380 void setGroupsInGroup(SecurityTransaction transaction, Group group, 381 Group[] groups) throws GeneralSecurityException; 382 383 /** 384 * Sets the <code>Group</code> s that a given <code>Role</code> is 385 * associated to. 386 * @param transaction 387 * @param role 388 * @param groups 389 * 390 * @throws GeneralSecurityException 391 */ 392 void setGroupsWithRole(SecurityTransaction transaction, Role role, 393 Group[] groups) throws GeneralSecurityException; 394 395 /** 396 * Sets the <code>Groups</code> s that a given <code>Group</code> is 397 * member of DIRECTLY (i.e. not via group membership). 398 * @param transaction 399 * @param group 400 * @param groups 401 * 402 * @throws GeneralSecurityException 403 */ 404 void setGroupsForGroup(SecurityTransaction transaction, Group group, 405 Group[] groups) throws GeneralSecurityException; 406 407 /** 408 * Adds a new role to the <code>Registry</code>. 409 * @param transaction 410 * @param name 411 * @return 412 * 413 * @throws GeneralSecurityException 414 * this is a <code>DuplicateException</code> if the role 415 * already existed 416 */ 417 Role registerRole(SecurityTransaction transaction, String name) 418 throws GeneralSecurityException; 419 420 /** 421 * Removes an existing <code>Role</code> from the <code>Registry</code> 422 * (including its relations). 423 * @param transaction 424 * @param role 425 * 426 * @throws GeneralSecurityException 427 */ 428 void deregisterRole(SecurityTransaction transaction, Role role) 429 throws GeneralSecurityException; 430 431 /** 432 * Retrieves a <code>Role</code> from the <code>Registry</code>. 433 * @param securityAccess 434 * @param name 435 * @return 436 * 437 * @throws GeneralSecurityException 438 * this is an <code>UnknownException</code> if the role is not 439 * known to the <code>Registry</code> 440 */ 441 Role getRoleByName(SecurityAccess securityAccess, String name) 442 throws GeneralSecurityException; 443 444 /** 445 * Retrieves all <code>Role</code> s from the <code>Registry</code> that 446 * have a certain namespace. 447 * @param securityAccess 448 * @param ns 449 * @return 450 * 451 * @throws GeneralSecurityException 452 */ 453 Role[] getRolesByNS(SecurityAccess securityAccess, String ns) 454 throws GeneralSecurityException; 455 456 /** 457 * Retrieves a <code>Role</code> from the <code>Registry</code>. 458 * @param securityAccess 459 * @param id 460 * @return 461 * 462 * @throws GeneralSecurityException 463 * this is an <code>UnknownException</code> if the role is not 464 * known to the <code>Registry</code> 465 */ 466 Role getRoleById(SecurityAccess securityAccess, int id) 467 throws GeneralSecurityException; 468 469 /** 470 * Retrieves all <code>Role</code> s from the <code>Registry</code>, 471 * except those that are only used internally (these end with a $ symbol); 472 * @param securityAccess 473 * @return 474 * 475 * @throws GeneralSecurityException 476 */ 477 Role[] getAllRoles(SecurityAccess securityAccess) 478 throws GeneralSecurityException; 479 480 /** 481 * Retrieves all <code>Role</code> s from the <code>Registry</code> that 482 * are associated with a given <code>User</code> DIRECTLY (i.e. not via 483 * group memberships). 484 * @param securityAccess 485 * @param user 486 * @return 487 * 488 * @throws GeneralSecurityException 489 */ 490 Role[] getRolesForUser(SecurityAccess securityAccess, User user) 491 throws GeneralSecurityException; 492 493 /** 494 * Retrieves all <code>Role</code> s from the <code>Registry</code> that 495 * are associated with a given <code>Group</code> DIRECTLY (i.e. not via 496 * group memberships). 497 * @param securityAccess 498 * @param group 499 * @return 500 * 501 * @throws GeneralSecurityException 502 */ 503 Role[] getRolesForGroup(SecurityAccess securityAccess, Group group) 504 throws GeneralSecurityException; 505 506 /** 507 * Sets the <code>Role</code> s that a given <code>User</code> is 508 * directly associated to. 509 * @param transaction 510 * @param user 511 * @param roles 512 * 513 * @throws GeneralSecurityException 514 */ 515 void setRolesForUser(SecurityTransaction transaction, User user, 516 Role[] roles) throws GeneralSecurityException; 517 518 /** 519 * Sets the <code>Role</code> s that a given <code>Group</code> is 520 * associated to. 521 * @param transaction 522 * @param group 523 * @param roles 524 * 525 * @throws GeneralSecurityException 526 */ 527 void setRolesForGroup(SecurityTransaction transaction, Group group, 528 Role[] roles) throws GeneralSecurityException; 529 530 /** 531 * Adds a new <code>SecuredObject</code> to the <code>Registry</code>. 532 * @param transaction 533 * @param type 534 * @param name 535 * @param title 536 * @return 537 * 538 * @throws GeneralSecurityException 539 * this is a <code>DuplicateException</code> if the object 540 * already existed 541 */ 542 SecuredObject registerSecuredObject(SecurityTransaction transaction, 543 String type, String name, String title) throws GeneralSecurityException; 544 545 /** 546 * Removes an existing <code>SecuredObject</code> from the 547 * <code>Registry</code> (including its associated rights). 548 * @param transaction 549 * @param object 550 * 551 * @throws GeneralSecurityException 552 */ 553 void deregisterSecuredObject(SecurityTransaction transaction, 554 SecuredObject object) throws GeneralSecurityException; 555 556 /** 557 * Retrieves a <code>SecuredObject</code> from the <code>Registry</code>. 558 * @param securityAccess 559 * @param name 560 * @param type 561 * @return 562 * 563 * @throws GeneralSecurityException 564 * this is an <code>UnknownException</code> if the 565 * <code>SecuredObject</code> is not known to the 566 * <code>Registry</code> 567 */ 568 SecuredObject getSecuredObjectByName(SecurityAccess securityAccess, 569 String name, String type) throws GeneralSecurityException; 570 571 /** 572 * Retrieves all <code>SecuredObject</code> s from the 573 * <code>Registry</code> that have a certain namespace. 574 * @param securityAccess 575 * @param ns 576 * @param type 577 * @return 578 * 579 * @throws GeneralSecurityException 580 */ 581 SecuredObject[] getSecuredObjectsByNS(SecurityAccess securityAccess, 582 String ns, String type) throws GeneralSecurityException; 583 584 /** 585 * Retrieves a <code>SecuredObject</code> from the <code>Registry</code>. 586 * @param securityAccess 587 * @param id 588 * @return 589 * 590 * @throws GeneralSecurityException 591 * this is an <code>UnknownException</code> if the 592 * <code>SecuredObject</code> is not known to the 593 * <code>Registry</code> 594 */ 595 SecuredObject getSecuredObjectById(SecurityAccess securityAccess, int id) 596 throws GeneralSecurityException; 597 598 /** 599 * Retrieves all <code>SecuredObject</code> s from the 600 * <code>Registry</code>. 601 * @param securityAccess 602 * @param type 603 * @return 604 * 605 * @throws GeneralSecurityException 606 */ 607 SecuredObject[] getAllSecuredObjects(SecurityAccess securityAccess, 608 String type) throws GeneralSecurityException; 609 610 /** 611 * Adds a new <code>Privilege</code> to the <code>Registry</code>. 612 * @param transaction 613 * @param name 614 * @return 615 * 616 * @throws GeneralSecurityException 617 * this is a <code>DuplicateException</code> if the 618 * <code>Privilege</code> already existed 619 */ 620 Privilege registerPrivilege(SecurityTransaction transaction, String name) 621 throws GeneralSecurityException; 622 623 /** 624 * Removes an existing</code> Privilege</code> from the <code>Registry 625 * </code> (including its relations). 626 * @param transaction 627 * @param privilege 628 * 629 * @throws GeneralSecurityException 630 */ 631 void deregisterPrivilege(SecurityTransaction transaction, 632 Privilege privilege) throws GeneralSecurityException; 633 634 /** 635 * Retrieves a <code>Privilege</code> from the <code>Registry</code>. 636 * @param securityAccess 637 * @param name 638 * @return 639 * 640 * @throws GeneralSecurityException 641 * this is an <code>UnknownException</code> if the privilege 642 * is not known to the <code>Registry</code> 643 */ 644 Privilege getPrivilegeByName(SecurityAccess securityAccess, String name) 645 throws GeneralSecurityException; 646 647 /** 648 * Retrieves all <code>Privileges</code> s from the <code>Registry</code> 649 * that are associated with a given <code>Role</code>. 650 * @param securityAccess 651 * @param role 652 * @return 653 * 654 * @throws GeneralSecurityException 655 */ 656 Privilege[] getPrivilegesForRole(SecurityAccess securityAccess, Role role) 657 throws GeneralSecurityException; 658 659 /** 660 * Sets all <code>Privilege</code> s that are associated with a given 661 * <code>Role</code>. 662 * @param transaction 663 * @param role 664 * @param privileges 665 * 666 * @throws GeneralSecurityException 667 */ 668 void setPrivilegesForRole(SecurityTransaction transaction, Role role, 669 Privilege[] privileges) throws GeneralSecurityException; 670 671 /** 672 * Adds a new <code>RightType</code> to the <code>Registry</code>. 673 * @param transaction 674 * @param name 675 * @return 676 * 677 * @throws GeneralSecurityException 678 * this is a <code>DuplicateException</code> if the 679 * <code>RightType</code> already existed 680 */ 681 RightType registerRightType(SecurityTransaction transaction, String name) 682 throws GeneralSecurityException; 683 684 /** 685 * Removes an existing <code>RightType</code> from the 686 * <code>Registry</code> (including its relations). 687 * @param transaction 688 * @param type 689 * 690 * @throws GeneralSecurityException 691 */ 692 void deregisterRightType(SecurityTransaction transaction, RightType type) 693 throws GeneralSecurityException; 694 695 /** 696 * Retrieves a <code>RightType</code> from the <code>Registry</code>. 697 * @param securityAccess 698 * @param name 699 * @return 700 * 701 * @throws GeneralSecurityException 702 * this is an <code>UnknownException</code> if the 703 * <code>RightType</code> is not known to the 704 * <code>Registry</code> 705 */ 706 RightType getRightTypeByName(SecurityAccess securityAccess, String name) 707 throws GeneralSecurityException; 708 709 /** 710 * Retrieves the <code>Rights</code> from the <code>Registry</code> that 711 * are associated with a given <code>Role</code> and a 712 * <code>SecurableObject</code>. 713 * @param securityAccess 714 * @param object 715 * @param role 716 * @return 717 * 718 * @throws GeneralSecurityException 719 */ 720 Right[] getRights(SecurityAccess securityAccess, SecurableObject object, 721 Role role) throws GeneralSecurityException; 722 723 /** 724 * Sets the <code>Rights</code> to be associated with a given 725 * <code>Role</code> and <code>SecurableObject</code>. 726 * @param transaction 727 * @param object 728 * @param role 729 * @param rights 730 * 731 * @throws GeneralSecurityException 732 */ 733 void setRights(SecurityTransaction transaction, SecurableObject object, 734 Role role, Right[] rights) throws GeneralSecurityException; 735 736 /** 737 * Sets one <code>Right</code> to be associated with a given 738 * <code>Role</code> and all given <code>SecurableObjects</code>. 739 * @param transaction 740 * @param objects 741 * @param role 742 * @param right 743 * 744 * @throws GeneralSecurityException 745 */ 746 void setRights(SecurityTransaction transaction, SecurableObject[] objects, 747 Role role, Right right) throws GeneralSecurityException; 748 }