protected override void CachePermission(IPermissionItem permission)
 {
     lock (lockPad)
     {
         CachePermissionInternal(permission);
     }
 }
        public override IPermissionItem GetPermission(long resourceId, long roleNumber)
        {
            VerifyPermissionAreLoaded();

            PermissionList permissionList;

            IPermissionItem permission = null;

            if (permissionCache.TryGetValue(resourceId, out permissionList))
            {
                if (permissionList.Contains(roleNumber))
                {
                    permission = permissionList[roleNumber];
                }
            }
            else
            {
                //permission is not cached let's find it from the database
                permission = PermissionDb.GetPermission(resourceId, roleNumber);
                if (permission == null)
                {
                    //permission does not exist in the database either. probably is a new permission.
                    return(null);
                }

                //cache this permission
                lock (lockPad)
                {
                    CachePermissionInternal(permission);
                }
            }

            return(permission);
        }
        void CachePermissionInternal(IPermissionItem permission)
        {
            if (permission == null)
            {
                throw new ArgumentNullException(nameof(permission));
            }

            PermissionList resourcePerms;

            if (permissionCache.TryGetValue(permission.ResourceId, out resourcePerms))
            {
                resourcePerms.Add(permission);
            }
            else
            {
                resourcePerms = new PermissionList {
                    permission
                };
                permissionCache.Add(permission.ResourceId, resourcePerms);
            }
        }
 /// <summary>
 /// Caches the permission.
 /// </summary>
 /// <param name="permission">The permission.</param>
 protected abstract void CachePermission(IPermissionItem permission);
示例#5
0
 public void Update(IPermissionItem permissionItem)
 {
     Insert(permissionItem.ResourceId, permissionItem.RoleNumber, permissionItem.PermValue);
 }