예제 #1
0
        public IPrivilege GetPrivilege(Object entity, params ISecurityScope[] securityScopes)
        {
            IList <IObjRef>  objRefs = ObjRefHelper.ExtractObjRefList(entity, null);
            IPrivilegeResult result  = GetPrivileges(objRefs, securityScopes);

            return(result.GetPrivileges()[0]);
        }
예제 #2
0
        public IPrivilegeResult GetPrivilegesByObjRef <V>(IList <V> objRefs, params ISecurityScope[] securityScopes) where V : IObjRef
        {
            ISecurityContext context       = SecurityContextHolder.Context;
            IAuthorization   authorization = context != null ? context.Authorization : null;

            if (authorization == null)
            {
                throw new SecurityException("User must be authenticated to be able to check for privileges");
            }
            if (securityScopes.Length == 0)
            {
                throw new ArgumentException("No " + typeof(ISecurityScope).Name + " provided to check privileges against");
            }
            List <IObjRef> missingObjRefs = new List <IObjRef>();

            lock (writeLock)
            {
                IPrivilegeResult result = CreateResult(objRefs, securityScopes, missingObjRefs, authorization, null);
                if (missingObjRefs.Count == 0)
                {
                    return(result);
                }
            }
            if (PrivilegeService == null)
            {
                throw new SecurityException("No bean of type " + typeof(IPrivilegeService).FullName
                                            + " could be injected. Privilege functionality is deactivated. The current operation is not supported");
            }
            String userSID = authorization.SID;
            IList <IPrivilegeOfService> privilegeResults = PrivilegeService.GetPrivileges(missingObjRefs.ToArray(), securityScopes);

            lock (writeLock)
            {
                HashMap <PrivilegeKey, IPrivilege> privilegeResultOfNewEntities = null;
                for (int a = 0, size = privilegeResults.Count; a < size; a++)
                {
                    IPrivilegeOfService privilegeResult = privilegeResults[a];
                    IObjRef             reference       = privilegeResult.Reference;

                    PrivilegeKey privilegeKey = new PrivilegeKey(reference.RealType, reference.IdNameIndex, reference.Id, userSID);
                    bool         useCache     = true;
                    if (privilegeKey.Id == null)
                    {
                        useCache        = false;
                        privilegeKey.Id = reference;
                    }
                    privilegeKey.SecurityScope = InterningFeature.Intern(privilegeResult.SecurityScope.Name);

                    IPrivilege privilege = CreatePrivilegeFromServiceResult(reference, privilegeResult);
                    if (useCache)
                    {
                        privilegeCache.Put(privilegeKey, privilege);
                    }
                    else
                    {
                        if (privilegeResultOfNewEntities == null)
                        {
                            privilegeResultOfNewEntities = new HashMap <PrivilegeKey, IPrivilege>();
                        }
                        privilegeResultOfNewEntities.Put(privilegeKey, privilege);
                    }
                }
                return(CreateResult(objRefs, securityScopes, null, authorization, privilegeResultOfNewEntities));
            }
        }
예제 #3
0
        public IPrivilege GetPrivilegeByObjRef(IObjRef objRef, params ISecurityScope[] securityScopes)
        {
            IPrivilegeResult result = GetPrivilegesByObjRef(new List <IObjRef>(new IObjRef[] { objRef }), securityScopes);

            return(result.GetPrivileges()[0]);
        }