Search in sources :

Example 1 with AccessResult

use of org.olat.resource.accesscontrol.AccessResult in project OpenOLAT by OpenOLAT.

the class ACFrontendManager method accessResource.

@Override
public AccessResult accessResource(Identity identity, OfferAccess link, Object argument) {
    if (link == null || link.getOffer() == null || link.getMethod() == null) {
        log.audit("Access refused (no offer) to: " + link + " for " + identity);
        return new AccessResult(false);
    }
    AccessMethodHandler handler = accessModule.getAccessMethodHandler(link.getMethod().getType());
    if (handler == null) {
        log.audit("Access refused (no handler method) to: " + link + " for " + identity);
        return new AccessResult(false);
    }
    if (handler.checkArgument(link, argument)) {
        if (allowAccesToResource(identity, link.getOffer())) {
            Order order = orderManager.saveOneClick(identity, link);
            AccessTransaction transaction = transactionManager.createTransaction(order, order.getParts().get(0), link.getMethod());
            transactionManager.save(transaction);
            dbInstance.commit();
            log.audit("Access granted to: " + link + " for " + identity);
            return new AccessResult(true);
        } else {
            log.audit("Access error to: " + link + " for " + identity);
        }
    } else {
        log.audit("Access refused to: " + link + " for " + identity);
    }
    return new AccessResult(false);
}
Also used : Order(org.olat.resource.accesscontrol.Order) AccessTransaction(org.olat.resource.accesscontrol.AccessTransaction) AccessResult(org.olat.resource.accesscontrol.AccessResult) AccessMethodHandler(org.olat.resource.accesscontrol.method.AccessMethodHandler)

Example 2 with AccessResult

use of org.olat.resource.accesscontrol.AccessResult in project OpenOLAT by OpenOLAT.

the class ACFrontendManager method isAccessible.

/**
 * The rule to access a business group:<br/>
 * -No offer, access is free<br/>
 * -Owners have always access to the resource<br/>
 * -Tutors have access to the resource<br/>
 * -Participants have access to the resource<br/>
 * @param group
 * @param forId
 * @return
 */
@Override
public AccessResult isAccessible(BusinessGroup group, Identity forId, boolean allowNonInteractiveAccess) {
    if (!accessModule.isEnabled()) {
        return new AccessResult(true);
    }
    List<String> roles = businessGroupRelationDao.getRoles(forId, group);
    if (roles.contains(GroupRoles.coach.name())) {
        return new AccessResult(true);
    }
    if (roles.contains(GroupRoles.participant.name())) {
        return new AccessResult(true);
    }
    Date now = dateNow();
    OLATResource resource = OLATResourceManager.getInstance().findResourceable(group);
    List<Offer> offers = accessManager.findOfferByResource(resource, true, now);
    if (offers.isEmpty()) {
        if (methodManager.isValidMethodAvailable(resource, null)) {
            // not open for the moment: no valid offer at this date but some methods are defined
            return new AccessResult(false);
        } else {
            return new AccessResult(true);
        }
    }
    return isAccessible(forId, offers, allowNonInteractiveAccess);
}
Also used : Offer(org.olat.resource.accesscontrol.Offer) AccessResult(org.olat.resource.accesscontrol.AccessResult) OLATResource(org.olat.resource.OLATResource) Date(java.util.Date)

Example 3 with AccessResult

use of org.olat.resource.accesscontrol.AccessResult in project OpenOLAT by OpenOLAT.

the class CourseWebService method isCourseAccessible.

public static boolean isCourseAccessible(ICourse course, boolean authorRightsMandatory, HttpServletRequest request) {
    if (isAdmin(request)) {
        return true;
    }
    if (authorRightsMandatory && !isAuthor(request)) {
        return false;
    }
    Identity identity = getIdentity(request);
    RepositoryEntry entry = course.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
    ACService acManager = CoreSpringFactory.getImpl(ACService.class);
    AccessResult result = acManager.isAccessible(entry, identity, false);
    if (result.isAccessible()) {
        return true;
    }
    return false;
}
Also used : ACService(org.olat.resource.accesscontrol.ACService) AccessResult(org.olat.resource.accesscontrol.AccessResult) RepositoryEntry(org.olat.repository.RepositoryEntry) Identity(org.olat.core.id.Identity) RestSecurityHelper.getIdentity(org.olat.restapi.security.RestSecurityHelper.getIdentity)

Example 4 with AccessResult

use of org.olat.resource.accesscontrol.AccessResult in project openolat by klemens.

the class RepositoryEntryDetailsController method initForm.

@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
    int cmpcount = 0;
    if (formLayout instanceof FormLayoutContainer) {
        FormLayoutContainer layoutCont = (FormLayoutContainer) formLayout;
        layoutCont.contextPut("v", entry);
        layoutCont.contextPut("guestOnly", new Boolean(guestOnly));
        String cssClass = RepositoyUIFactory.getIconCssClass(entry);
        layoutCont.contextPut("cssClass", cssClass);
        boolean closed = entry.getRepositoryEntryStatus().isClosed() || entry.getRepositoryEntryStatus().isUnpublished();
        layoutCont.contextPut("closed", new Boolean(closed));
        RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(entry);
        VFSContainer mediaContainer = handler.getMediaContainer(entry);
        if (mediaContainer != null) {
            baseUrl = registerMapper(ureq, new VFSContainerMapper(mediaContainer.getParentContainer()));
        }
        setText(entry.getDescription(), "description", layoutCont);
        setText(entry.getRequirements(), "requirements", layoutCont);
        setText(entry.getObjectives(), "objectives", layoutCont);
        setText(entry.getCredits(), "credits", layoutCont);
        // thumbnail and movie
        VFSLeaf movie = repositoryService.getIntroductionMovie(entry);
        VFSLeaf image = repositoryService.getIntroductionImage(entry);
        if (image != null || movie != null) {
            ImageComponent ic = new ImageComponent(ureq.getUserSession(), "thumbnail");
            if (movie != null) {
                ic.setMedia(movie);
                ic.setMaxWithAndHeightToFitWithin(RepositoryManager.PICTURE_WIDTH, RepositoryManager.PICTURE_HEIGHT);
                // add poster image
                if (image != null) {
                    ic.setPoster(image);
                }
            } else {
                ic.setMedia(image);
                ic.setMaxWithAndHeightToFitWithin(RepositoryManager.PICTURE_WIDTH, RepositoryManager.PICTURE_HEIGHT);
            }
            layoutCont.put("thumbnail", ic);
        }
        // categories
        if (repositoryModule.isCatalogEnabled()) {
            List<CatalogEntry> categories = catalogManager.getCatalogEntriesReferencing(entry);
            List<String> categoriesLink = new ArrayList<>(categories.size());
            for (CatalogEntry category : categories) {
                String id = "cat_" + ++cmpcount;
                String title = StringHelper.escapeHtml(category.getParent().getName());
                FormLink catLink = uifactory.addFormLink(id, "category", title, null, layoutCont, Link.LINK | Link.NONTRANSLATED);
                catLink.setIconLeftCSS("o_icon o_icon-fw o_icon_catalog");
                catLink.setUserObject(category.getKey());
                categoriesLink.add(id);
            }
            layoutCont.contextPut("categories", categoriesLink);
        }
        if (!guestOnly) {
            boolean marked;
            if (row == null) {
                marked = markManager.isMarked(entry, getIdentity(), null);
            } else {
                marked = row.isMarked();
            }
            markLink = uifactory.addFormLink("mark", "mark", marked ? "details.bookmark.remove" : "details.bookmark", null, layoutCont, Link.LINK);
            markLink.setElementCssClass("o_bookmark");
            markLink.setIconLeftCSS(marked ? Mark.MARK_CSS_LARGE : Mark.MARK_ADD_CSS_LARGE);
        }
        RepositoryEntryStatistics statistics = entry.getStatistics();
        if (repositoryModule.isRatingEnabled()) {
            Integer myRating;
            if (row == null) {
                myRating = userRatingsDao.getRatingValue(getIdentity(), entry, null);
            } else {
                myRating = row.getMyRating();
            }
            Double averageRating = statistics.getRating();
            long numOfRatings = statistics.getNumOfRatings();
            float ratingValue = myRating == null ? 0f : myRating.floatValue();
            float averageRatingValue = averageRating == null ? 0f : averageRating.floatValue();
            ratingEl = new RatingWithAverageFormItem("rating", ratingValue, averageRatingValue, 5, numOfRatings);
            ratingEl.setEnabled(!guestOnly);
            layoutCont.add("rating", ratingEl);
        }
        if (repositoryModule.isCommentEnabled()) {
            long numOfComments = statistics.getNumOfComments();
            String title = "(" + numOfComments + ")";
            commentsLink = uifactory.addFormLink("comments", "comments", title, null, layoutCont, Link.NONTRANSLATED);
            commentsLink.setCustomEnabledLinkCSS("o_comments");
            String css = numOfComments > 0 ? "o_icon o_icon_comments o_icon-lg" : "o_icon o_icon_comments_none o_icon-lg";
            commentsLink.setIconLeftCSS(css);
        }
        // load memberships
        List<String> memberRoles = repositoryService.getRoles(getIdentity(), entry);
        List<Long> authorKeys = repositoryService.getAuthors(entry);
        boolean isAuthor = false;
        boolean isMember = memberRoles.contains(GroupRoles.owner.name()) || memberRoles.contains(GroupRoles.coach.name()) || memberRoles.contains(GroupRoles.participant.name());
        if (isMember) {
            isAuthor = authorKeys.contains(getIdentity().getKey());
            layoutCont.contextPut("isEntryAuthor", new Boolean(isAuthor));
        }
        // push roles to velocity as well
        Roles roles = ureq.getUserSession().getRoles();
        layoutCont.contextPut("roles", roles);
        if (!guestOnly && memberRoles.contains(GroupRoles.participant.name()) && repositoryService.isParticipantAllowedToLeave(entry)) {
            leaveLink = uifactory.addFormLink("sign.out", "leave", translate("sign.out"), null, formLayout, Link.BUTTON_SMALL + Link.NONTRANSLATED);
            leaveLink.setElementCssClass("o_sign_out btn-danger");
            leaveLink.setIconLeftCSS("o_icon o_icon_sign_out");
        }
        // access control
        String accessI18n = null;
        List<PriceMethod> types = new ArrayList<PriceMethod>();
        if (entry.isMembersOnly()) {
            // members only
            if (isMember) {
                String linkText = translate("start.with.type", translate(entry.getOlatResource().getResourceableTypeName()));
                startLink = uifactory.addFormLink("start", "start", linkText, null, layoutCont, Link.BUTTON_LARGE + Link.NONTRANSLATED);
                startLink.setElementCssClass("o_start btn-block");
                startLink.setIconRightCSS("o_icon o_icon_start o_icon-lg");
                startLink.setPrimary(true);
            }
            accessI18n = translate("cif.access.membersonly");
        } else {
            AccessResult acResult = acService.isAccessible(entry, getIdentity(), isMember, false);
            if (acResult.isAccessible()) {
                String linkText = translate("start.with.type", translate(entry.getOlatResource().getResourceableTypeName()));
                startLink = uifactory.addFormLink("start", "start", linkText, null, layoutCont, Link.BUTTON_LARGE + Link.NONTRANSLATED);
                startLink.setElementCssClass("o_start btn-block");
            } else if (acResult.getAvailableMethods().size() > 0) {
                for (OfferAccess access : acResult.getAvailableMethods()) {
                    AccessMethod method = access.getMethod();
                    String type = (method.getMethodCssClass() + "_icon").intern();
                    Price p = access.getOffer().getPrice();
                    String price = p == null || p.isEmpty() ? "" : PriceFormat.fullFormat(p);
                    AccessMethodHandler amh = acModule.getAccessMethodHandler(method.getType());
                    String displayName = amh.getMethodName(getLocale());
                    types.add(new PriceMethod(price, type, displayName));
                }
                String linkText = guestOnly ? translate("start.with.type", translate(entry.getOlatResource().getResourceableTypeName())) : translate("book.with.type", translate(entry.getOlatResource().getResourceableTypeName()));
                startLink = uifactory.addFormLink("start", "start", linkText, null, layoutCont, Link.BUTTON_LARGE + Link.NONTRANSLATED);
                // custom style
                startLink.setCustomEnabledLinkCSS("btn btn-success");
                startLink.setElementCssClass("o_book btn-block");
                if (guestOnly) {
                    if (entry.getAccess() == RepositoryEntry.ACC_USERS_GUESTS) {
                        startLink.setVisible(true);
                    } else {
                        startLink.setVisible(false);
                    }
                } else {
                    startLink.setVisible(true);
                }
            } else {
                String linkText = translate("start.with.type", translate(entry.getOlatResource().getResourceableTypeName()));
                startLink = uifactory.addFormLink("start", "start", linkText, null, layoutCont, Link.BUTTON_LARGE + Link.NONTRANSLATED);
                // startLink.setEnabled(false);
                startLink.setElementCssClass("o_start btn-block");
                startLink.setVisible(!guestOnly);
            }
            startLink.setIconRightCSS("o_icon o_icon_start o_icon-lg");
            startLink.setPrimary(true);
            startLink.setFocus(true);
            switch(entry.getAccess()) {
                case 0:
                    accessI18n = "ERROR";
                    break;
                case 1:
                    accessI18n = translate("cif.access.owners");
                    break;
                case 2:
                    accessI18n = translate("cif.access.owners_authors");
                    break;
                case 3:
                    accessI18n = translate("cif.access.users");
                    break;
                case 4:
                    accessI18n = translate("cif.access.users_guests");
                    break;
            }
        }
        layoutCont.contextPut("accessI18n", accessI18n);
        if (!types.isEmpty()) {
            layoutCont.contextPut("ac", types);
        }
        if (isMember) {
            // show the list of groups
            SearchBusinessGroupParams params = new SearchBusinessGroupParams(getIdentity(), true, true);
            List<BusinessGroup> groups = businessGroupService.findBusinessGroups(params, entry, 0, -1);
            List<String> groupLinkNames = new ArrayList<>(groups.size());
            for (BusinessGroup group : groups) {
                String groupLinkName = "grp_" + ++cmpcount;
                String groupName = StringHelper.escapeHtml(group.getName());
                FormLink link = uifactory.addFormLink(groupLinkName, "group", groupName, null, layoutCont, Link.LINK | Link.NONTRANSLATED);
                link.setIconLeftCSS("o_icon o_icon-fw o_icon_group");
                link.setUserObject(group.getKey());
                groupLinkNames.add(groupLinkName);
            }
            layoutCont.contextPut("groups", groupLinkNames);
        }
        boolean passed = false;
        boolean failed = false;
        String score = null;
        if (row != null) {
            passed = row.isPassed();
            failed = row.isFailed();
            score = row.getScore();
        } else {
            UserEfficiencyStatement statement = effManager.getUserEfficiencyStatementLightByRepositoryEntry(entry, getIdentity());
            if (statement != null) {
                Boolean p = statement.getPassed();
                if (p != null) {
                    passed = p.booleanValue();
                    failed = !p.booleanValue();
                }
                Float scoreVal = statement.getScore();
                if (scoreVal != null) {
                    score = AssessmentHelper.getRoundedScore(scoreVal);
                }
            }
        }
        layoutCont.contextPut("passed", passed);
        layoutCont.contextPut("failed", failed);
        layoutCont.contextPut("score", score);
        OLATResource ores = entry.getOlatResource();
        Date recentLaunch = userCourseInfosManager.getRecentLaunchDate(ores, getIdentity());
        layoutCont.contextPut("recentLaunch", recentLaunch);
        // show how many users are currently using this resource
        String numUsers;
        int cnt = 0;
        Long courseResId = entry.getOlatResource().getResourceableId();
        OLATResourceable courseRunOres = OresHelper.createOLATResourceableInstance(RunMainController.ORES_TYPE_COURSE_RUN, courseResId);
        if (ores != null)
            cnt = coordinatorManager.getCoordinator().getEventBus().getListeningIdentityCntFor(courseRunOres);
        numUsers = String.valueOf(cnt);
        layoutCont.contextPut("numUsers", numUsers);
        // Where is it in use
        if (isAuthor || roles.isOLATAdmin() || roles.isInstitutionalResourceManager()) {
            List<RepositoryEntry> refs = referenceManager.getRepositoryReferencesTo(entry.getOlatResource());
            if (refs.size() > 0) {
                List<String> refLinks = new ArrayList<>(refs.size());
                int count = 0;
                for (RepositoryEntry ref : refs) {
                    String name = "ref-" + count++;
                    FormLink refLink = uifactory.addFormLink(name, "ref", ref.getDisplayname(), null, formLayout, Link.NONTRANSLATED);
                    refLink.setUserObject(ref.getKey());
                    refLink.setIconLeftCSS("o_icon o_icon-fw " + RepositoyUIFactory.getIconCssClass(ref));
                    refLinks.add(name);
                }
                layoutCont.contextPut("referenceLinks", refLinks);
            }
        }
        // Link to bookmark entry
        String url = Settings.getServerContextPathURI() + "/url/RepositoryEntry/" + entry.getKey();
        layoutCont.contextPut("extlink", url);
        Boolean guestAllowed = (entry.getAccess() >= RepositoryEntry.ACC_USERS_GUESTS && loginModule.isGuestLoginLinksEnabled()) ? Boolean.TRUE : Boolean.FALSE;
        layoutCont.contextPut("isGuestAllowed", guestAllowed);
        // Owners
        List<String> authorLinkNames = new ArrayList<String>(authorKeys.size());
        Map<Long, String> authorNames = userManager.getUserDisplayNamesByKey(authorKeys);
        int counter = 0;
        for (Map.Entry<Long, String> author : authorNames.entrySet()) {
            Long authorKey = author.getKey();
            String authorName = StringHelper.escapeHtml(author.getValue());
            FormLink authorLink = uifactory.addFormLink("owner-" + ++counter, "owner", authorName, null, formLayout, Link.NONTRANSLATED | Link.LINK);
            authorLink.setUserObject(authorKey);
            authorLinkNames.add(authorLink.getComponent().getComponentName());
        }
        layoutCont.contextPut("authorlinknames", authorLinkNames);
        // License
        boolean licEnabled = licenseModule.isEnabled(licenseHandler);
        if (licEnabled) {
            layoutCont.contextPut("licSwitch", Boolean.TRUE);
            License license = licenseService.loadOrCreateLicense(entry.getOlatResource());
            layoutCont.contextPut("license", LicenseUIFactory.translate(license.getLicenseType(), getLocale()));
            layoutCont.contextPut("licenseIconCss", LicenseUIFactory.getCssOrDefault(license.getLicenseType()));
            String licensor = StringHelper.containsNonWhitespace(license.getLicensor()) ? license.getLicensor() : "";
            layoutCont.contextPut("licensor", licensor);
            layoutCont.contextPut("licenseText", LicenseUIFactory.getFormattedLicenseText(license));
        } else {
            layoutCont.contextPut("licSwitch", Boolean.FALSE);
        }
    }
}
Also used : OfferAccess(org.olat.resource.accesscontrol.OfferAccess) OLATResourceable(org.olat.core.id.OLATResourceable) CatalogEntry(org.olat.repository.CatalogEntry) ArrayList(java.util.ArrayList) License(org.olat.core.commons.services.license.License) FormLayoutContainer(org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer) RepositoryEntry(org.olat.repository.RepositoryEntry) ImageComponent(org.olat.core.gui.components.image.ImageComponent) VFSContainerMapper(org.olat.core.util.vfs.VFSContainerMapper) VFSLeaf(org.olat.core.util.vfs.VFSLeaf) RatingWithAverageFormItem(org.olat.core.gui.components.rating.RatingWithAverageFormItem) BusinessGroup(org.olat.group.BusinessGroup) VFSContainer(org.olat.core.util.vfs.VFSContainer) OLATResource(org.olat.resource.OLATResource) Roles(org.olat.core.id.Roles) GroupRoles(org.olat.basesecurity.GroupRoles) FormLink(org.olat.core.gui.components.form.flexible.elements.FormLink) SearchBusinessGroupParams(org.olat.group.model.SearchBusinessGroupParams) Date(java.util.Date) RepositoryEntryStatistics(org.olat.repository.model.RepositoryEntryStatistics) AccessMethod(org.olat.resource.accesscontrol.model.AccessMethod) Price(org.olat.resource.accesscontrol.Price) UserEfficiencyStatement(org.olat.course.assessment.UserEfficiencyStatement) PriceMethod(org.olat.repository.ui.PriceMethod) AccessResult(org.olat.resource.accesscontrol.AccessResult) RepositoryHandler(org.olat.repository.handlers.RepositoryHandler) AccessMethodHandler(org.olat.resource.accesscontrol.method.AccessMethodHandler) Map(java.util.Map)

Example 5 with AccessResult

use of org.olat.resource.accesscontrol.AccessResult in project openolat by klemens.

the class ACFrontendManager method accessResource.

@Override
public AccessResult accessResource(Identity identity, OfferAccess link, Object argument) {
    if (link == null || link.getOffer() == null || link.getMethod() == null) {
        log.audit("Access refused (no offer) to: " + link + " for " + identity);
        return new AccessResult(false);
    }
    AccessMethodHandler handler = accessModule.getAccessMethodHandler(link.getMethod().getType());
    if (handler == null) {
        log.audit("Access refused (no handler method) to: " + link + " for " + identity);
        return new AccessResult(false);
    }
    if (handler.checkArgument(link, argument)) {
        if (allowAccesToResource(identity, link.getOffer())) {
            Order order = orderManager.saveOneClick(identity, link);
            AccessTransaction transaction = transactionManager.createTransaction(order, order.getParts().get(0), link.getMethod());
            transactionManager.save(transaction);
            dbInstance.commit();
            log.audit("Access granted to: " + link + " for " + identity);
            return new AccessResult(true);
        } else {
            log.audit("Access error to: " + link + " for " + identity);
        }
    } else {
        log.audit("Access refused to: " + link + " for " + identity);
    }
    return new AccessResult(false);
}
Also used : Order(org.olat.resource.accesscontrol.Order) AccessTransaction(org.olat.resource.accesscontrol.AccessTransaction) AccessResult(org.olat.resource.accesscontrol.AccessResult) AccessMethodHandler(org.olat.resource.accesscontrol.method.AccessMethodHandler)

Aggregations

AccessResult (org.olat.resource.accesscontrol.AccessResult)24 RepositoryEntry (org.olat.repository.RepositoryEntry)12 ACService (org.olat.resource.accesscontrol.ACService)12 ArrayList (java.util.ArrayList)6 Date (java.util.Date)6 Identity (org.olat.core.id.Identity)6 ICourse (org.olat.course.ICourse)6 CourseTreeVisitor (org.olat.course.run.userview.CourseTreeVisitor)6 VisibleTreeFilter (org.olat.course.run.userview.VisibleTreeFilter)6 IdentityEnvironment (org.olat.core.id.IdentityEnvironment)4 Roles (org.olat.core.id.Roles)4 INode (org.olat.core.util.nodes.INode)4 Visitor (org.olat.core.util.tree.Visitor)4 BCCourseNode (org.olat.course.nodes.BCCourseNode)4 BusinessGroup (org.olat.group.BusinessGroup)4 SearchBusinessGroupParams (org.olat.group.model.SearchBusinessGroupParams)4 OLATResource (org.olat.resource.OLATResource)4 OfferAccess (org.olat.resource.accesscontrol.OfferAccess)4 RestSecurityHelper.getIdentity (org.olat.restapi.security.RestSecurityHelper.getIdentity)4 Offer (org.olat.resource.accesscontrol.Offer)3